509.斐波那契数

https://leetcode-cn.com/problems/fibonacci-number/

解法一:dp

易得状态转移方程(其实严格来说不算dp,因为没有求最值)

dp[n] = dp[n-1] + dp[n-2]

初始条件

dp[0] = 0, dp[1] = 1

由于只需从前往后推出dp[n],最多只要记录前两位的状态,因此没必要创建长度为n的数组 改进:(状态压缩)i从2~n一次遍历,用p、q分别记录i-2、i-1位置的状态,每轮更新pq即可

class Solution:
    def fib(self, n: int) -> int:
        if n == 0 or n == 1:
            return n
        p = 0  #i-2位置
        q = 1  #i-1位置
        r = 0  #i位置
        for i in range(2, n+1):
            r = p + q
            p = q
            q = r
        return r

最后更新于