题目:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
解题思路:
实现我们爬楼梯时只能够爬一层或者两层
那么我们就可以根层数反推这里因为又选择性限制那么就会有动态规划
如:第1层这里是1种方法dp[1]=1
第二层就是有两种即dp[2]=2
那么我们想第三层可以怎么来呢?
首先我们是不是只能通过第一层跨两步直接到第三层吧,或者通过第二层跨一步到第三层。所以我们的方法是不是等于dp[3]=dp[1]+dp[2]=3呢
那么我们继续递推则是不是第四层就是dp[4]=dp[2]+dp[3]=2+3=5呢
代码题解:
class Solution {
public int climbStairs(int n) {
if(n==1){//到达第一层的走法
return 1;
}else if(n==2){//到达第二层的走法
return 2;
}
int dp[]=new int[n+1];//到达第n层的走法dp数组
dp[1]=1;//到达第一层走法
dp[2]=2;//到达第二层走法
for(int i=3;i<=n;i++){
dp[i]=dp[i-2]+dp[i-1];//到达第i层的方法因为到达第i层只能通过一步或者两步到达,也就是第i-1,第i-2层到达,
//所以也就是到达第i层就是到达这两层的方法之和
}
return dp[n];
}
}