剑指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); } }
相关文章推荐
- 剑指offer-chapter2-面试题9-青蛙跳台阶(java)
- 剑指offer-肺部拉契-青蛙跳台阶
- 剑指offer中的青蛙跳台阶问题
- 剑指offer-----青蛙跳台阶问题(1)
- 【面试题】剑指Offer-9-斐波那契数列&&青蛙跳台阶
- 08跳台阶–剑指offer, java版
- 【剑指offer】之青蛙跳台阶
- [剑指offer]算法8 青蛙跳台阶问题
- 剑指offer 面试题9 斐波那契数列/青蛙跳台阶/矩形覆盖/变态跳台阶
- 剑指offer面试题9-青蛙跳台阶及其变种问题
- 【剑指Offer】008 青蛙跳台阶
- 剑指offer-青蛙变态跳台阶
- 【剑指offer】一,跳台阶(java实现)
- 【剑指offer】二,变态跳台阶(java实现)
- 剑指Offer---Java实现跳台阶和变态跳台阶
- Java 剑指offer之 递归青蛙跳、变态青蛙跳
- 斐波那契及青蛙跳台阶@剑指offer
- 【剑指offer——JAVA实现】变态跳台阶
- 剑指offer之青蛙变态跳台阶
- 剑指Offer-青蛙跳台阶-Python