方法一 递归+缓冲
int GetNextStep(int step)
{
static int buff[1000] = {0};
if (buff[step] != 0) {
return buff[step];
}
if (step == 0) {
buff[step] = 1;
} else if(step == 1) {
buff[step] = 1;
} else {
buff[step] = GetNextStep(step - 1) + GetNextStep(step - 2);
}
return buff[step];
}
int climbStairs(int n){
int step;
step = GetNextStep(n);
return step;
}
动态规划
int climbStairs(int n){
int buff[1000] = {0, 1, 2};
for (int i = 3; i <= n; i++) {
buff[i] = buff[i - 1] + buff[i - 2];
}
return buff[n];
}
优化掉数组 空间o1 时间on
int climbStairs(int n){
int pre1 = 1;
int pre2 = 1;
int step = 1;
for (int i = 2; i <= n; i++) {
step = pre1 + pre2;
pre2 = pre1;
pre1 = step;
}
return step;
}