【剑指Offer】跳台阶&变态跳台阶

题目描述

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

当n = 1时,有一种跳法。f(1) = 1

当n = 2时,有两种跳法,跳两次,一次跳一级。跳一次,直接跳两级。 f(2) = 2

当n > 2时,第一次跳一级,这时跳法数目就等于后面n - 1级的跳法数目,第一次跳两级,这时跳法数目就等于后面n - 2级的跳法数目。因此f(n) = f(n-1) + f(n-2)。结果为斐波那契数列。

解法一、递归 (时间复杂度随输入规模呈指数级增长)

class Solution {
public:
    int jumpFloor(int number) {
        if(number == 1) return 1;
        if(number == 2) return 2;
        return jumpFloor(number - 1) + jumpFloor(number - 2);
    }
};

解法二、迭代

class Solution {
public:
    int jumpFloor(int number) {
        int x = 1,y = 2, z;
        if(number == 1) return 1;
        if(number == 2) return 2;
        for(int i = 3; i <= number; ++i){
            z = y;
            y = x + y;
            x = z;
        }
        return y;
    }
};

原文地址:https://www.cnblogs.com/whisperbb/p/11711065.html

时间: 2024-11-05 17:14:29

【剑指Offer】跳台阶&变态跳台阶的相关文章

剑指offer系列8--青蛙跳台阶问题

[题目]一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.[思路] * n=1时,有1种跳法,f(1)=1; * n=2时,有2种跳法,f(2)=2; * n=3时,有3种跳法,f(3)=3=f(3-1)+f(3-2)=f(2)+f(1); * n=4时,有5种跳法,f(4)=f(4-1)+f(4-2)=f(3)+f(2)=5; [code] 1 package com.exe2.offer; 2 3 /** 4 * [题目]一只青蛙一次可以跳上1级台阶,

《剑指Offer》题目:跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目分析:这其实就是斐波拉契数列,递归的思想,用递推来实现,防止栈溢出. public class JumpFloor { public static int jumpFloor(int target) { int res[] = new int[2]; res[0]=1; res[1]=2; // 与前面的题只有初始值不一样 int temp = 0; if(target==0) return

剑指offer源码系列-跳台阶

这是一个斐波那契数列的变形 题目1388:跳台阶 时间限制:1 秒内存限制:32 兆特殊判题:否提交:3030解决:1226 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 5 样例输出: 8 #include<iostream> #includ

剑指offer(8)跳台阶

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 解题代码: function jumpFloor(number) { // write code here //跳台阶问题是斐波那契数列的一个形式转换,要跳上n级台阶 //如果第一步跳1级,剩下台阶的跳法即为跳上n-1级台阶的跳法 //如果第一步跳2级,剩下台阶的跳法即为跳上n-2级台阶的跳法 if(number <= 2){ return number; } va

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

《剑指offer》题解

有段时间准备找工作,囫囵吞枣地做了<剑指offer>提供的编程习题,下面是题解收集. 当初没写目录真是个坏习惯(-_-)||,自己写的东西都要到处找. 剑指Offer - 九度1524 - 复杂链表的复制 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先 剑指Offer - 九度1508 - 把字符串转换成整数 剑指Offer - 九度1504 - 把数组排成最小的数 剑指Offer - 九度1503 - 二叉搜索树与双向链表 剑指Offer - 九度1390 - 矩形覆盖 剑

剑指offer算法总结

剑指offer算法学习总结 节选剑指offer比较经典和巧妙的一些题目,以便复习使用.一部分题目给出了完整代码,一部分题目比较简单直接给出思路.但是不保证我说的思路都是正确的,个人对算法也不是特别在行,只不过这本书的算法多看了几遍多做了几遍多了点心得体会.于是想总结一下.如果有错误也希望能指出,谢谢. 具体代码可以参考我的GitHub仓库: https://github.com/h2pl/SwordToOffer 数论和数字规律 从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的

[剑指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:变态跳台阶

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

【剑指Offer】文章索引(未完)

下面是牛客网剑指Offer编程题的一些解题报告,目前还没刷完,会一篇篇加上来. 跳台阶 变态跳台阶 矩形覆盖 重建二叉树 替换空格 用两个栈代替队列 斐波那契数列 二进制中 1 的个数 版权声明:本文为博主原创文章,未经博主允许不得转载.