Description
Dynamic Programming
URL: leetcode-cn.com/problems/cl…
**关键点:**找 最近 重复 子 问题 !!!
思路
一级台阶:1种(1)
两级台阶:2种(1+1 or 2)
三级台阶:?
三级台阶等于 退一步变二级台阶 or 退两步变一级台阶 => 2 + 1
四级台阶:?
四级台阶等于 退一步变三级台阶 or 退两步变二级台阶 => 3 + 2
所以,可以看出递归思想(纯递归简单无缓存写法时间复杂度过高);要用迭代的方式写出来
(๑*◡*๑) 啊 这个是斐波拉契数
Python
class Solution:
def climbStairs(self, n: int) -> int:
if n <= 2: return n
i, j, k = 1, 2, 3
for stairs in range(3, n + 1):
k = i + j
i = j
j = k
return k
Java
class Solution {
public int climbStairs(int n) {
if (n <= 2) return n;
int f1 = 1, f2 = 2, f3 = 3;
for (int i = 3; i < n+1; i++) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
}
END (〃'▽'〃)