[剑指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)中跳法,第一次跳出二阶台阶后,后面还有Fib(3-2)中跳法,第一次跳出三阶台阶后,后面还有Fib(3-3)中跳法,即Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;

当n = n 时,共有n种跳的方式,第一次跳出一阶台阶后,后面还有Fib(n-1)中跳法, 第一次跳出二阶台阶后,后面还有Fib(n-2)中跳法……………………..第一次跳出n阶台阶后,后面还有 Fib(n-n)中跳法,即Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+……….+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+…….+Fib(n-1)又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+…….+Fib(n-2)故Fib(n) = 2*Fib(n-1) n >= 2

综上所述:
这里写图片描述

代码

/*---------------------------------------
*   日期:2015-07-19
*   作者:SJF0115
*   题目: 2.变态跳台阶
*   网址:http://www.nowcoder.com/books/coding-interviews/22243d016f6b47f2a6928b4313c85387?rp=1
*   结果:AC
*   来源:剑指Offer
*   博客:
-----------------------------------------*/
#include <iostream>
using namespace std;

class Solution {
public:
    int jumpFloorII(int number) {
        if(number <= 0){
            return 0;
        }//if
        else if(number == 1){
            return 1;
        }//else
        return 2*jumpFloorII(number - 1);
    }
};

int main(){
    Solution s;
    int number = 5;
    cout<<s.jumpFloorII(number)<<endl;
    return 0;
}
AI 代码解读
目录
打赏
0
0
0
0
63
分享
相关文章
|
11月前
剑指Offer(第二版)11
剑指Offer(第二版)11
49 0
【剑指offer】-左旋转字符串-41/67
【剑指offer】-左旋转字符串-41/67
剑指offer(1-10题)详解
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
153 0
剑指offer(1-10题)详解
剑指offer(60-67题)详解
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
100 0
剑指offer(60-67题)详解
剑指offer(41-50题)详解
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
129 0
剑指offer(41-50题)详解
剑指offer-6.重建二叉树
剑指offer-6.重建二叉树
65 0
剑指offer(11-25题)详解
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。。
151 0
剑指offer(11-25题)详解

相关实验场景

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等