问题描述
想象有一只小青蛙,它想跳上一些台阶。但是这只青蛙有一个规则:它可以一次跳上1个台阶,或者一次跳上2个台阶。现在的问题是,如果总共有 n 个台阶,那么这只青蛙有多少种不同的方式可以跳上去呢?
示例
比如有2个台阶,小青蛙可以:
- 先跳1个台阶,再跳1个台阶。
- 直接跳2个台阶。
所以,当有2个台阶时,小青蛙有2种不同的跳法。
解决方案
我们可以通过一个简单的数学方法来解决这个问题。我们发现,如果要知道 n 个台阶有多少种跳法,其实就等于知道 n−1个台阶加上 n−2个台阶的跳法数量之和。
为什么呢?因为无论最后一步怎么跳(跳1个或跳2个),剩下的跳法就是前面 n−1 或 n−2个台阶的跳法。
代码实现
根据上面的思路,我们可以写出如下的Java函数 jumpFloor
,它接受一个整数参数 number
表示台阶的数量,并返回青蛙可以跳上这些台阶的不同方式的数量。
public class FrogJump { public int jumpFloor(int number) { // 如果没有台阶,那就是0种方法 if (number <= 0) { return 0; } // 如果只有1个台阶,那只能跳1步,所以是1种方法 if (number == 1) { return 1; } // 如果是2个台阶,可以直接跳2步或跳两次1步,所以是2种方法 if (number == 2) { return 2; } // 初始化前两个台阶的跳法数量 int oneStepBefore = 1; // 1个台阶的跳法 int twoStepsBefore = 2; // 2个台阶的跳法 int result = 0; // 从第三个台阶开始计算 for (int i = 3; i <= number; i++) { // 当前台阶的跳法等于前两个台阶的跳法之和 result = oneStepBefore + twoStepsBefore; // 更新前两个台阶的跳法 oneStepBefore = twoStepsBefore; twoStepsBefore = result; } // 返回结果 return result; } }
如果这篇文章对你有帮助,请点个免费的赞👍,让它能够帮助更多的人。