剑指offer----------------青蛙跳台阶

题目描述

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

思路:

把N阶台阶的跳法看成是n的函数,记为f(n)。当n=2时,有两级台阶,有两种跳法:一个是分两次跳,每次跳1级,另一种是一次跳2级。

当n>2时,第一次跳有两种选择,一是一次跳一级,此时跳法数目等于后面的剩下的n-1级台阶的跳法数目,即为f(n-1)。另一种选择是

第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为分f(n-2)。因此n级台阶的不同的跳法总数为f(n)=f(n-1)+f(n-2)

自己写的代码

#include<iostream>

using namespace std;
class Solution {
public:
int jumpFloor(int number) {
int result[2]={0,1};
if(number<=2)
return result[number-1];
int n1=1,n2=2,n=0; 
for(int i=2;i<number;i++)
{
n=n1+n2;
n1=n2;
n2=n;
}
return n;
}
};
int main()
{
Solution s;
int m;
cout<<"print the steps:";
cin>>m;
cout<<s.jumpFloor(m);
}

时间: 2024-11-20 17:02:18

剑指offer----------------青蛙跳台阶的相关文章

剑指offer青蛙跳台阶问题

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. //递归方式 public static int f(int n) { //参数合法性验证 if (n < 1) { System.out.println("参数必须大于1!"); System.exit(-1); } if (n == 1 || n == 2) return 1; else return f(n - 1) + f(n - 2); } //非递归方式 publ

【剑指Offer】跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 递归,由上一步到这一步青蛙跳了一级或跳了两级,当前台阶数为n,那跳n级台阶的方法数就是问跳n-1和跳n-2级楼梯方法数相加.由此可看出,这是一个斐波那契数列. 结束条件就是当n=1时,只有一种方法(跳一级):n=0时,0种方法:当n=2时,有两种方法(一次跳一级,跳两次:一次直接跳两级) 代码实现 class Solution { public: int jumpFloor(int n

剑指OFFER之跳台阶(九度OJ1388)

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 5 样例输出: 8 题目分析: 这道题很明显正向分析是不行的,也就是说,最后面的一个台阶,要依赖于前面台阶的.所以,最后一个台阶的方法数目可以由前面计算出来.那么,仔细想一下,一个青蛙只能跳1-2步,也就是说,

剑指offer——变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 问题分析 由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳是在前一次跳的结果上累加的,因此我们可以考虑使用递归的方法来解决问题. 那么从递归的三个步骤开始寻找解决方案: 1. 递归截止条件. 由于每次可以跳1-n的任意阶数,因此无论有多少阶,都可以一次跳完,为了表示方便,我们将一次性跳完的情况设为F(0),当n=1时,只能有一种情况,F(1) = 1.当n

(原)剑指offer变态跳台阶

变态跳台阶 时间限制:1秒空间限制:32768K 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析一下明天是个斐波那契数列,我们一步一步退出其通项公式. 设台阶数为n, 总跳法为jumps n          jumps 1 1 2 2 3 4 4 8 5 16 现在猜测其通项公式为 fbonicc(n) = 2 * fbonicc(n - 1) 列出4的全部跳法 5的全部跳法 1111 1111 (1) 2  11

《剑指offer》---跳台阶问题

本文算法使用python3实现 1. 问题1 1.1 题目描述: ??一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. ??时间限制:1s:空间限制:32768K 1.2 思路描述: ??(1)当 $ n=0 $ 时,返回0 ??(2)当 $ n=1 $ 时,只有一种跳法:跳1级台阶. ??(3)当 $ n=2 $ 时,有两种跳法:(a) 跳1级再跳1级:(b) 直接跳2级. ??(4)当 $ n=3 $ 时,我们只考虑最后一步的情况:(a)当最后一步只

剑指offer 08跳台阶

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

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

题目描述 一只青蛙一次可以跳上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).结果为斐波那契数列. 解法一.递归 (时间复杂度随

剑指offer T8跳台阶

由推导可知,递推公式为 f(n) = f(n-1) + f(n-2) 迭代法: 递归: 递归优化(保存结果,剪枝): 原文地址:https://www.cnblogs.com/jiguang321/p/11619071.html

9、剑指offer--变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路:可知本题f(n)=f(1)+f(2)+...+f(n-1)+1;通过数学归纳法得到f(n)=2^(n-1) 1 #include <iostream> 2 using namespace std; 3 class Solution { 4 public: 5 //fn=2^(n-1) 6 int jumpFloorII(int number) { 7 if(num