直接采用递归会超时原因是会重复计算,需要改变方法
非递归版
class Solution {
public int climbStairs(int n) {
if(n==1)
{
return 1;
}
if(n==2)
{
return 2;
}
int arr[]=new int[n];
arr[0]=1;
arr[1]=2;
for(int i=2;i<n;i++)
{
arr[i]=arr[i-1]+arr[i-2];
}
return arr[n-1];
}
}
递归版的这里每次将先前计算过的数组传入就不会重复计算了
public class Solution {
public int climbStairs(int n) {
int[] memo = new int[n + 1];
return helper(n, memo);
}
public int helper(int n, int[] memo) {
if (n <= 1) return 1;
if (memo[n] > 0) return memo[n];
return memo[n] = helper(n - 1, memo) + helper(n - 2, memo);
}
}