题目描述
思路
n个楼梯,可以理解为第一次只走一阶,然后剩下的n-1个楼梯的可能结果 + 第一次只走二阶,然后剩下的n-2个楼梯的可能结果。
因此,符合递归的特性,但是递归写法会导致时间过长,这里可以通过空间换时间的方法,将低数值的结果保存起来即可
实现方法
class Solution {
public:
int climbStairs(int n) {
if (n <= 2) {
return n;
}
int arr[n+1];
arr[1] = 1;
arr[2] = 2;
for (int i = 3; i < n + 1; i++) {
// 这一步保证能走到a[n] = a[n-1] + a[n-2]
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
}
};
---递归思路----
class Solution {
public:
int climbStairs(int n) {
if (n <= 3) {
return n;
}
return climbStairs(n - 1) + climbStairs(n - 2);
}
};