题目链接:LC 70. 爬楼梯
2020.10.13第一次解答:
解题思路
典型的动态规划,套用斐波那契数列即可
注意,直接套用会导致栈空间爆炸(时间复杂度O(n²))。个人解法是开辟辅助数组记录重复数据,使数据得到复用,从而降低时间复杂度为O(n)(只需计算n个值)
C++代码
class Solution {
int m[1000];
public:
int climbStairs(int n) {
if(n <= 2) return n;
if(m[n]) return m[n];
m[n] = climbStairs(n - 1) + climbStairs(n - 2);
return m[n];
}
};
忘截图了,时间100%,空间90%
Java代码
class Solution {
int[] f = new int[1000];
public int climbStairs(int n) {
if(n <= 2) return n;
if(f[n] != 0) return f[n];
f[n] = climbStairs(n - 1) + climbStairs(n - 2);
return f[n];
}
}
看题解发现有用数学方法做的,下次尝试一下