You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
tag: dynamicprogramming
public class Solution {
public int climbStairs(int n) {
if(n == 0) return 0;
if(n == 1) return 1;
if(n == 2) return 2;
int[] states = new int[n+1]; //存储状态变量的数组,每个元素代表到 i 有多少种方式
states[0] = 0;
states[1] = 1; //只能走1步
states[2] = 2; //走 1+1 、2,共两种方式
//状态转移方程
//最后一步有两种方式,即走1步或2步
//走一步的话,前面就有i-1步需要走,共有states[i-1]种方式
//走两步的话,前面就有i-2步需要走,共有states[i-2]种方式
//取和,即为到达i有多少种方式
for(int i=3; i<=n; i++){
states[i] = states[i-1] + states[i-2];
}
return states[n];
}
}