目录
- 题目描述:
- 输入:
- 输出:
- 代码实现:
题目描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
输入:
n = 2
输出:
2
解释:有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
代码实现:
public class Main{public static void main(String[] args) {int n = 4;System.out.println(climbStairs(n));//5}/*** 爬N阶楼梯的方法 等于 爬N-1的方法数 + 爬N-2的方法数* 直接运用递归来做会超时,所以采用动态规划的思想:计算出每一种情况并存储* 计算方法:斐波那契数列,当前计算结果等于前面两数之和** @param n 楼梯结束* @return 返回所所有上楼的情况的数量*/public static int climbStairs(int n) {//滚动数组int x1 = 0, x2 = 0, x3 = 1;for (int i = 0; i < n; i++) {x1 = x2;//上一轮加数二向前滚动一个单位:覆盖上一轮加数一x2 = x3;//上一轮计算结果覆盖加数二x3 = x1 + x2;//计算本轮结果}return x3;//返回N轮之后的结果}
}