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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值