动态规划
public static int climbStairs(int n) {
if (n==1) return 1;
int[] nums=new int[n+1];
nums[0]=0;nums[1]=1;nums[2]=2;
for (int i = 3; i <= n; i++) {
nums[i]=nums[i-1]+nums[i-2];
}
return nums[n];
}
学以致用
- 确定状态:最后一步上去还是两步上去:
最后n-1步:f(n-1)
最后n-2步:f(n-2)
- 状态方程:
f(n)=f(n-1)+f(n-2)
- 初始条件和边界条件:
f(1)=1;f(2)=2
- 计算顺序:
for (int i = 3; i <= n; i++) { }