剑指offer9:青蛙变态跳台阶,1,2,3……,n。

1. 题目描述

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

2. 思路和方法

  每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后一个台阶必须跳。所以共用2^(n-1)中情况。换个表述可能更容易懂一点:小鸟要从起点0飞到终点N。中间有1~n-1个点可以中途停靠休息,它可以休息可以不休息,休息次数不限。问,到终点时,一共有多少种情况。

  实现放方法: F(n) = F(n-1)+F(n-2)+...+F(1);F(n-1) = F(n-2)+F(n-3)+...+F(1);……;

3. C++核心代码

 1 class Solution {
 2 public:
 3     int jumpFloorII(int number) {
 4         int sum = 0;
 5         if (number < 0)
 6             return 0;
 7         if (number == 0 || number == 1)
 8             return 1;
 9         for (int i = 1; i <= number; i++)
10         {
11             sum += jumpFloorII(number - i);
12         }
13         return sum;
14     }
15 };

参考资料

https://blog.csdn.net/xiaomei920528/article/details/74178927

原文地址:https://www.cnblogs.com/wxwhnu/p/11407250.html

时间: 2024-07-28 18:45:01

剑指offer9:青蛙变态跳台阶,1,2,3……,n。的相关文章

剑指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 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) { re

【剑指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-青蛙变态跳台阶-全概率公式

【剑指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

面试题10.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)=2^(n-1) 编程实现 class Solution { publ