您的位置:首页 > Web前端

剑指offer之青蛙跳台阶(java)

2019-08-02 19:43 225 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/dream_one_day/article/details/98229656

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

刚开始是知道这个是斐波那契数列的变形,可是老想不通这个逻辑,总觉得n级台阶,🐸青蛙可以跳一级,也可以跳两级,这是一个不确定决定,所以老绕不出这个圈圈。
最后我用了老办法,一级一级画,自己算出能跳几次,用数学归纳法总结🤦‍

n阶台阶 跳的次数
1 1
2 2
3 3
4 5
5 8
…… ……

这样应该就很明显了叭,哈哈哈哈哈哈😄。递归我没写,因为递归在规模大时,即消耗内存,费时也多。
你要实在想写递归代码,可以看一下下边的变态跳台阶。

public class Solution {
public int JumpFloor(int target) {
if(target < 3){
return target;
}
int a = 1;
int b = 2;
int sum = 0;
for(int i = 3; i <= target; i++){
sum = a + b;
a = b;
b = sum;
}
return sum;
}
}

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

我叭现在相通这个道理了🎉🎉🎉,就做了这个变态跳台阶
规律就是:👇
f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(0)
f(n-1) = f(n-2) + f(n-3) + f(n-4) +… +f(0)
两式联合可以推出 f(n) = 2 * f(n-1)

public class Solution {
public int JumpFloorII(int target) {
if(target < 3){
return target;
}
return 2 * JumpFloorII(target -1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: