用java代码 实现 一个楼梯,每次可以爬1级或者2级,请问有多少种方式爬到顶楼
时间: 2024-09-06 20:06:18 浏览: 32
在 Java 中,这个问题通常是一个经典的动态规划问题,也被称为“爬楼梯”或“汉诺塔”变种。我们可以用一个二维数组 `dp` 来记录到达每层的不同爬法数。设 `dp[i]` 表示到达第 i 层的方式数。
初始状态,到达第一层有1种方式(直接上去),其余楼层的初始值均为0:
```java
int[][] dp = new int[n+1][2]; // n表示总层数,dp[i][j]表示到达第i层的走法,其中j=0代表走1级,j=1代表走2级
dp[1][0] = 1; // 到达第一层,只能走一级
```
然后递推公式如下:
- 要到达第 i 层,可以从第 i-1 层爬1级上,也可以从第 i-2 层爬2级上,所以有 dp[i-1][0] 和 dp[i-2][1] 种方式。
- 所以 dp[i][0] = dp[i-1][0] + dp[i-2][1]
- 同理,到达第 i 层也可以只爬2级,即从第 i-2 层,因此 dp[i][1] = dp[i-2][0]
完整代码如下:
```java
public class Staircase {
public int climbStairs(int n) {
int[][] dp = new int[n+1][2];
if (n > 0) {
dp[1][0] = 1;
dp[1][1] = 0;
}
for (int i = 2; i <= n; i++) {
dp[i][0] = dp[i - 1][0] + dp[i - 2][1]; // 走1级
dp[i][1] = dp[i - 2][0]; // 走2级
}
return dp[n][0] + dp[n][1]; // 返回总的爬法数
}
}
```
阅读全文