public int climbStairs(int n) {
/*if(n == 1) return 1;
if(n == 2) return 2;
return climbStairs(n - 1) + climbStairs(n - 2);*/
//用递归会超时,而且效率低
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
int temp = 0;
for(int i = 2; i < n; i++){
temp = list.get(i - 1) + list.get(i - 2);
list.add(temp);
}
return list.get(n - 1);
}
用数组也可以实现,数组长度一共是n,可以确定的:
public class Solution {
public int climbStairs(int n) {
/*if(n == 1) return 1;
if(n == 2) return 2;
return climbStairs(n - 1) + climbStairs(n - 2);*/
//用递归会超时,而且效率低
if(n == 1 || n == 2)
return n;//这里先处理了否则后面会有下标越界
int[] res = new int[n];
res[0] = 1;
res[1] = 2;
for(int i = 2; i < n; i++)
res[i] = res[i - 1] + res[i - 2];
return res[n - 1];
}
}