剑指offer 9.变态跳台阶

9.变态跳台阶

题目

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

思路

与上题相似,假设要到3级,那么可以从0,1,2级直接到三级,那么f3=f1+f2+1,f2=f1+1,f3=4,找规律。
也可以换一种思路,不限制长度,那就是每一级都可以跳,只有选择跳和不跳,那么就是2^(n-1),结果一样。

代码

  public static int JumpFloor(int target) {
    if (target <= 0) {
      return 0;
    }
    if(target==1)
    {
      return 1;
    }
    if (target==2)
    {
      return 2;
    }
    int f[] = new int[target + 1];
    f[1] = 1;
    f[2] = 2;
    for (int i = 3; i <= target; i++) {
      f[i] = f[i - 1] + f[i - 2];
    }
    return f[target];
  }

原文地址:https://www.cnblogs.com/blogxjc/p/12367601.html

时间: 2024-10-14 22:32:44

剑指offer 9.变态跳台阶的相关文章

剑指offer:变态跳台阶

目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:变态跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 这题的名字和题面都和跳台阶这题很相似,没看过的同学可以先看看. 很明显,这题最大的改变就是状态转移式由原来的f[n]=f[n-1]+f[n-2]变成了f[n]=1+f[1]+f[2]+...+f[n-1].这就意味着不能完全照搬斐波那契数列的思想进行解题.但这个状态转移式很明显也具有规律性,

剑指OFFER之变态跳台阶(九度OJ1389)

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=50). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 6 样例输出: 32 解题思路: 这道题目跟之前的跳台阶大同小异,只是跳台阶的阶数从1变到了n,也就是说,不再是跳一下或者跳两下的问题,而是跳n下的问题.那么解题的思路显然还得逆向分析,我们

[剑指Offer]2.变态跳台阶

题目 一仅仅青蛙一次能够跳上1级台阶,也能够跳上2级--它也能够跳上n级. 求该青蛙跳上一个n级的台阶总共同拥有多少种跳法. 思路 用Fib(n)表示青蛙跳上n阶台阶的跳法数,设定Fib(0) = 1: 当n = 1 时. 仅仅有一种跳法,即1阶跳,即Fib(1) = 1; 当n = 2 时. 有两种跳的方式,一阶跳和二阶跳,即Fib(2) = Fib(1) + Fib(0) = 2; 当n = 3 时.有三种跳的方式,第一次跳出一阶台阶后,后面还有Fib(3-1)中跳法,第一次跳出二阶台阶后.

【剑指Offer】变态跳台阶

问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级. 求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路: 每一次调用函数都是查找这个楼梯数有多少种跳法,如果楼梯数已为0, 则表明只有这一种跳法,也就是没有下一步的跳法了: 若不为0,则设这一步会跳1.2.3~n阶,然后将跳完这一步的 下一步跳法的跳法相加,返回结果. 示例: n=4 1 1 1 1 1 1 2 1 2 1 1 3 2 1 1 2 2 3 1 4 代码实现 class Solution { publi

剑指offer 09变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. java版本: public class Solution { public static void main(String[] args){ long startTime=System.currentTimeMillis(); System.out.println("第4项的结果是:"+JumpFloorII(4)); long endTime=System.current

【剑指Offer】09 - 跳台阶2

跳台阶2 时间限制:1秒 空间限制:32768K 本题知识点:贪心 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. public class Solution { public int JumpFloorII(int target) { } } 解法: /** * 对于最后一个台阶,必定是要被跳上的, * 对与前 n 个台阶,每个都有跳上与不跳的跳法,因此跳法共有 2^(n-1) 种 */ public class So

剑指offer:青蛙跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution: """ f(0) = 1 f(1) = 1 ... f(n-1) = f(n-2) + f(n-3) + ... + f(1) + f(0) f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(1) + f(0) = f(n-1) + f(n-1) = 2 * f(n-1) f(n) = 2^(

剑指offer-青蛙变态跳台阶-全概率公式

剑指offer8:青蛙跳台阶

1. 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 2. 思路和方法 青蛙每一次跳跃只有两种选择:一是再跳1级阶梯到达第n级阶梯,此时小青蛙处于第n-1级阶梯:或者再跳2级阶梯到达第n级阶梯,此时小青蛙处于n-2级阶梯.于是,n级阶梯的跳法总是依赖于前n-1级阶梯的跳法总数f(n-1)和前n-2级阶梯的跳法总数f(n-2).因为只有两种可能性,所以,f(n)=f(n-1)+f(n-2): 递推公式f(n)=f(n