python3 斐波那契数列以及爬楼梯

动态规划算法

本质上是这步的“价值”由上一步决定,比如求公共最长子序列:

例子(来源 算法图解)

用户在使用搜索引擎,比如搜索fosh。那我们就要猜测用户是想要搜索fish还是fort.怎么求取公共最长子序列。做一个4*4网格,每个网格的计算方式都由上一格来决定。

if word_a[i] == word_b[j]:
    cell[i][j] = cell[i-1][j-1] + 1
else:
    cell[i][j] = max(cell[i-1][j], cell[i][j-1])

最终填满方格的结果就是答案。

leetcode 70题 爬楼梯 经典题型

n个台阶,一次走1阶或者2阶。共有几种走法?

其实这个是一个斐波那契数列,n=1的时候1种,n=2时2种。在n阶时,要么就从n-1上来,要么就从n-2上来,所以n时的方法数就是n-1和n-2两个台阶上方法的和。

class Solution:
    def climbStairs(self, n: int) -> int:
        if n <= 2:
            return n
        dp = [0] * n
        dp[0] = 1
        dp[1] = 2
        for i in range(2, n):
            dp[i] = dp[i-1] + dp[i-2]
        return dp[n-1]

或者使用经典的做法:(简化到最优了)

class Solution:
    def climbStairs(self, n: int) -> int:
        a = 1
        b = 1
        for i in range(1, n+1):
            a, b = b, a + b #此时i=1,a=1  i=2,a=2  i=3,a=3
        return a

上一篇:exceljs中单元格cell的font color修改导致污染的解决办法 exceljs cell font color


下一篇:7.HTML图像标签