题目描述:有 n 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法
思路:第n阶楼梯,可以由n-1和n-2一步到达。用dp(n)代表方法数,dp(n)=dp(n-1)+dp(n-2)
//动态规划,爬楼梯问题
public class ClimbStairs {
public static int climbStairs(int n){
if(n<=2){
return n;
}
int cur=2;//到达当前阶梯的方法数,从2开始,与for循环i对应
int pre=1;//到达前一个阶梯的方法数
for(int i=2;i<n;i++){
int next=pre+cur;//到达后一个阶梯的方法数
pre=cur;
cur=next;//最后一躺循环i=n-1;next=dp(i-1)+dp(i)赋值给cur,然后i++,i=n跳出循环
}
return cur;
}
public static void main(String[] args){
System.out.println(climbStairs(3));//3
System.out.println(climbStairs(4));//5
System.out.println(climbStairs(5));//8
System.out.println(climbStairs(6));//13
}
}