题目描述:有 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
}
}
本文介绍了一个经典的动态规划问题——爬楼梯问题。通过分析题目,我们了解到每次可以爬1阶或2阶楼梯,目标是计算到达第n阶楼梯的所有可能路径数量。文章详细解释了动态规划的思路,并提供了具体的Java代码实现,展示了如何使用两个变量来优化空间复杂度。
649

被折叠的 条评论
为什么被折叠?



