dp = [0for _ inrange(n+1)] dp[0] = 1 dp[1] = 2 for i inrange(2,n+1): dp[i] = dp[i-1]+dp[i-2] return dp[n-1]
这里又有一个规律
dp[i-1] 是上一个状态 dp[i-2] 是上上个状态
我们能不能用两个变量维持这个状态呢? 见示例代码
示例代码
1 2 3 4 5 6 7 8 9 10
# 时间复杂度:O(n) # 空间复杂度: O(1) classSolution: defclimbStairs(self, n: int) -> int: if n <= 2: return n a = 1 b = 2 for i inrange(2,n): a, b = b, a + b return b
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 时间复杂度:O(n) // 空间复杂度:O(1) classSolution { public: intclimbStairs(int n){ if(n<=2){return n;} int a = 1, b = 2; for(int i = 2; i < n; i++){ int nxt = b; b+=a; a = nxt; } return b; } };