题目:
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?
分析:
考察动态规划,用户上楼梯,每次可迈1步或2步,现有n阶的楼梯,问有多少种方式到达最高的楼梯。定义状态为“到达i阶楼梯有d[i]种方式”;状态转移方程为:d[i]=d[n-2]+d[n-1];因为用户最后一次迈步要么先到n-1阶楼梯,再迈1步;要么先到n-2阶楼梯再迈2步。当i=1或2时,d[i]=i.
代码:
public class ClimbingStairs {
public static int countWays(int n){
int[] result=new int[n];
if(n<1) return 0;
if(n>0&&n<3) return n;
else{
result[0]=1;
result[1]=2;
for(int i=2;i<n;i++){
result[i]=result[i-1]+result[i-2];
}
}
return result[n-1];
}
public static void main(String[] args){
int n=5;
int result=countWays(n);
System.out.println("result:"+result);
}
}