题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解法:
设青蛙跳上n级台阶有f(n)中方式,则
f(n) =f(n-1)+ f(n-2)+...+f(2)+f(1)+f(0):(f(n-1)为第一次跳了1个台阶,剩下n-1个台阶有f(n-1)中跳法,以此类推。)
f(n-1) = f(n-2)+...+f(2)+f(1)+f(0)
那么f(n)=f(n-1)+f(n-1)=2*f(n-1):因此得到递归公式:
    1             n = 1
f(n)=      2*f(n-1)     n>1
class Solution {
public:
    int jumpFloorII(int number) {
        if(number == 1)
            return 1;
        else
            return 2*jumpFloorII(number-1);
    }
};
 
排列组合解法:
第n个台阶一定要跳,其余n-1个台阶可以选择跳或者不跳,两种可能,那就一共是2^(n-1)中可能性
 
class Solution {
public:
    int jumpFloorII(int number) {
        return 1<<--number;
    }
};

最开始的解法:直接使用了这个公式f(n) =f(n-1)+ f(n-2)+...+f(2)+f(1)+f(0)

class Solution {
public:
    int jumpFloorII(int number) {
        int * f = new int[number+1];
        memset(f, 0, sizeof(f));
        f[0] = 1;
        for(int i=1;i<=number;i++){
            for(int j=0;j<i;j++){
                f[i] += f[j];
            }
        }
        return f[number];
    }
};

 对于这种题目也可以写出数列找规律。

posted on 2020-09-20 21:35  曹婷婷  阅读(130)  评论(0)    收藏  举报