利用Java求楼梯上有 n 阶台阶,上楼可以一步上 1 阶,也可以一步上 2 阶,编写算法计算共有多少种不同的上楼梯方法.,并写出主函数
时间: 2024-10-19 07:15:54 浏览: 34
不同路况下正常步态特征研究 (2000年)
这是一个经典的动态规划问题,可以用递推的方式来解决,通常被称为“爬楼梯”问题。我们可以创建一个二维数组 `dp` 来存储每阶台阶到达的不同走法数。`dp[i]` 就表示从第一阶到第 i 阶的不同走法。
算法步骤如下:
1. 初始化两个状态,`dp[0] = 1`(因为只有到达第一阶这一种方法),`dp[1] = 1`(只有一阶台阶,只能一步上去)。
2. 对于每个台阶 `i`(从2到n),有两种情况:要么前一步是一阶(即走了一步1阶到第 i - 1 阶,再一步1阶到第 i 阶),要么前两步都是两阶(即走了两步2阶到第 i 阶)。所以`dp[i]` 等于 `dp[i - 1]` 加上 `dp[i - 2]`。
3. 最终结果就是 `dp[n]`。
以下是 Java 中的主函数实现:
```java
public class ClimbingStairs {
public int climbStairs(int n) {
if (n <= 0) {
return 0;
}
// 初始化 dp 数组
int[] dp = new int[n + 1];
dp[0] = 1; // 第0阶和第1阶各有1种方法
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2]; // 根据动态规划公式计算
}
return dp[n]; // 返回到达第n阶的所有方法数
}
public static void main(String[] args) {
ClimbingStairs cs = new ClimbingStairs();
int steps = 4; // 比如有4阶台阶
int result = cs.climbStairs(steps);
System.out.println("对于 " + steps + " 阶台阶,一共有 " + result + " 种上楼梯方法.");
}
}
```
阅读全文