
/**
1阶:1步,即1种; 2阶:1步+1步或直接2步,即2种
f(1) = 1,f(2) =2
3阶:由1阶迈2步,或2阶迈一步; 4阶:由2阶迈2步,或3阶1步; n阶:由n-2阶迈2步,或n-1阶迈1步
f(n) = f(n - 1) + f(n - 2)
*/
class Solution {
/**
1阶:1步,即1种; 2阶:1步+1步或直接2步,即2种
f(1) = 1,f(2) =2
3阶:由1阶迈2步,或2阶迈一步; 4阶:由2阶迈2步,或3阶1步; n阶:由n-2阶迈2步,或n-1阶迈1步
f(n) = f(n - 1) + f(n - 2)
*/
//记录已经走过的台阶需要的方法数
private List<Integer> memory = new ArrayList<>();
public int climbStairs(int n) {
//初始化,1阶与2阶可直接得出
memory.add(1); //f(1) = 1;
memory.add(2); //f(2) = 2;
//return help(n);
if(n <= 2) {
return memory.get(n - 1);
}
for(int i = 3; i <= n; i++) {
memory.add(memory.get(i - 2) + memory.get(i - 3));
}
return memory.get(memory.size() - 1);
}
private int help(int n) {
if(memory.size() >= n) {
return memory.get(n - 1);
}
if(n == 1 || n == 2) {
return memory.get(n);
} else {
memory.add(help(n - 1) + help(n - 2));
}
return memory.get(memory.size() - 1);
}
}
738



被折叠的 条评论
为什么被折叠?



