[剑指offer]算法8 青蛙跳台阶问题
2017-10-28 19:12
316 查看
题目描述1
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1秒空间限制:32768K
【问题分析】刚开始我对于这道题目我想的相当的复杂,我说出来可以共勉一下,如果真的能研究处理来那就更好了。我是根据2的次方来确定每次跳几个台阶,如果是2的0次方,那就是1个,如果是2的1次方,那就是2个,那么你就会得到很多的101010001类似于这样的序列然后从中找规律就行。结果呢,我就是没想出来。第二个方法呢,我就从1个台阶开始算从中找规律结果还真是巧,符合斐波那契数列。所以这道题目用斐波那契数列来完成。既然知道了方法,那就很好办了。链接:http://blog.csdn.net/h2677lucy/article/details/78377966,这里面就是求解斐波那契数列的两个方法,递归和纯算数。
题目描述2
一只青蛙一次可以跳上1级台阶,也可以跳上2级,...,也可以跳n个台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。网上是这么分析的,而且我代码也通过了
因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级
跳1级,剩下n-1级,则剩下跳法是f(n-1)
跳2级,剩下n-2级,则剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因为f(n-1)=f(n-2)+f(n-3)+...+f(1)
所以f(n)=2*f(n-1)
public class Solution {
public int JumpFloorII(int n) {
if(n<=1) {
return 1;
}else {
return 2*JumpFloorII(n-1);
}
}
}
测试类代码
package Offer;
public class offer8 {
public static void main(String[] args) {
offer8 o8=new offer8();
System.out.println(o8.f(8)+"H");
}
public int f(int n) {
if(n<=1) {
return 1;
}else {
return 2*f(n-1);
}
}
}
相关文章推荐
- 剑指offer面试题9 斐波那契数列及青蛙跳台阶问题
- 剑指offer-算法题练习:part8 跳台阶-斐波那契数列问题
- 剑指offer-----青蛙跳台阶问题(1)
- 剑指offer中的青蛙跳台阶问题
- 剑指offer-算法题练习:part9 变态跳台阶-斐波那契数列问题
- 剑指offer面试题9-青蛙跳台阶及其变种问题
- 剑指offer青蛙跳台阶问题
- 剑指offer 算法 (画图让抽象问题形象化)
- 【剑指Offer】008 青蛙跳台阶
- 剑指offer-算法题练习:part7 斐波那契数列-斐波那契数列问题
- 剑指offer 青蛙跳台阶
- 剑指offer 算法 (分解让复杂问题简单)
- 【剑指offer】之青蛙跳台阶
- 剑指offer之青蛙变态跳台阶
- C++,剑指offer青蛙变态跳台阶
- 【面试题】剑指Offer-9-斐波那契数列&&青蛙跳台阶
- 剑指offer-肺部拉契-青蛙跳台阶
- 剑指offer-算法题练习:part10 矩形覆盖-斐波那契数列问题
- 单链表中的常见算法问题(剑指offer5/13/15/16/17)
- 剑指offer-chapter2-面试题9-青蛙跳台阶(java)