题解 | #跳台阶#
跳台阶
https://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4
问题描述
想象有一只小青蛙,它想跳上一些台阶。但是这只青蛙有一个规则:它可以一次跳上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;
}
}
如果这篇文章对你有帮助,请点个免费的赞👍,让它能够帮助更多的人。
#题解#小学生都能看懂的算法 文章被收录于专栏
主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。
查看26道真题和解析