【剑指offer-解题系列(9)】变态跳台阶

来源:互联网 发布:剑灵水鸢捏脸数据 编辑:程序博客网 时间:2024/06/05 20:07

题目描述

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

分析

假设 a[n] 是跳上n级台阶的总步数
1、青蛙可以一次猛跳上n级!
2、青蛙可以在前n-1级台阶找出 a[n-1] 种跳法,然后最后跳1步,总共a[n-1]种;
3、青蛙可以在前n-2级台阶找出 a[n-2] 种跳法,然后最后跳2步,总共a[n-2]种;
4、青蛙可以在前n-3级台阶找出 a[n-3] 种跳法,然后最后跳3步,总共a[n-3]种;
。。。。。。使用a数组保存之前的计算结果就行。
所以:a[n]=1 +  a[n-1]+a[n-2]+a[n-3]+...+a[1]; 

代码实现

    int jumpFloorII(int number) {
        if(number<=0)return 0;
        int*a = new int[1+number];
        memset(a,number,0);
        int res = jumpFloorII(number, a ); 
        delete[]a;
        return res;
    }
    
    int  jumpFloorII(int number, int *a ){ 
        if(number==0)
            return 0;
        if(number==1){
            a[1]=1;
            return a[1];
        }
        else{
            for(int i = 1;i<number;i++){
                if(a[i]==0){
                    a[i] =  jumpFloorII(i,a );
                }  
                a[number]+=a[i];
            } 
            a[number]++;
        }
        return a[number]; 
    }