【剑指Offer-循环和递归】面试题10.3:变态跳台阶

题目描述

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

思路

用f(n)表示青蛙跳上一个n级(n>=1)的台阶总共的跳法数。对于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) = f(n-1) + f(n-2) + ... + f(1) = 2f(n-1) = 2^2f(n-2) = ... = 2^{n-1}f(1) = 2^{n-1}),所以(f(n)=2^{n-1}). 代码如下:

class Solution {
public:
    int jumpFloorII(int number) {
        if(number==0)
            return 0;
        
        int ans = 1;
        while(number>1){
            ans *= 2;
            number--;
        }
        return ans;
    }
};
原文地址:https://www.cnblogs.com/flix/p/12567706.html