剑指offer:变态跳台阶

一、题目描述

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

解题思路:

  1. 观察跳法的结果:
    当n = 1, 只有1种跳法;
    当n = 2时,有2种跳法;
    当n = 3 时,有4种跳法;
    当n = 4时,有8种跳法;
    当n = 5时,有16种跳法;
  2. 分析规律
    针对上n个台阶,青蛙第一次跳1步,则剩下的可能为F(n-1)
    第一次上2步,则剩下的可能为F(n-2)
    ……
    第一次上n-1步,则剩下的可能为F(n-(n-1))=F(1)=1
    第一次跳n步,则剩下的可能为F(n-n)=F(0);定义F(0)=1

  3. 则总的情况数为:
    F(n)=F(0)+F(1)+F(2)+……F(n-2)+F(n-1) ··········①
    同理:当上n-1个台阶,则总的情况数为:
    F(n-1)=F(0)+F(1)+F(2)+……F(n-2) ·················②
    ①-②可得:F(n)=2*F(n-1)

二、实现代码

class Solution {
public:
    int jumpFloorII(int number) {
        if(number==1)
            return 1;

        //相当于求公比为2的等比数列中的元素项
        int res=1;
        while(number>1){
            res = 2*res;
            number--;
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/yph001/article/details/80935122