方法一:递归该方法超时啦
var climbStairs = function(n) {
if(n==1)return n;
if(n==2)return n;
return climbStairs(n-1) + climbStairs(n-2);
};
方法二:记忆递归使用一个数组来保存递归过的值。
var climbStairs = function(n) {
let arr = new Array(n).fill(0);
function ans(n){
if(arr[n]>0)return arr[n];
if(n==1)return n;
if(n==2)return n;
arr[n] = ans(n-1) + ans(n-2);
return arr[n];
}
return ans(n);
};
方法三:动态规划
var climbStairs = function(n) {
if(n<=2)return n;
let arr = [1,2];
for(let i=3;i<=n;i++){
let temp = arr[0]+arr[1];
[arr[0],arr[1]] = [arr[1],temp];
}
return arr[1];
};