Problem: 70. 爬楼梯
思路
典型的动态规划算法题
最优子结构:f(n-1) + f(n-2)
状态转移方程:f(n) = f(n-1) + f(n-2)
边界:f(1) = 1; f(2) = 2
重叠子问题:f(9) = f(8) + f(7); f(8) = f(7) + f(6)
解题方法
利用动态规划算法,用for循环,从最底层子问题计算出结果并存储下来,往上叠加结果知道计算出最终结果
复杂度
- 时间复杂度:
O ( n ) O(n) O(n)
- 空间复杂度:
O ( 1 ) O(1) O(1)
Code
class Solution {
func climbStairs(_ n: Int) -> Int {
if n == 1 {
return 1
} else if n == 2 {
return 2
}
var a = 1
var b = 2
var temp = 0
for i in 3...n {
temp = a + b
a = b
b = temp
}
return temp
}
}