【剑指offer-JZ71】跳台阶扩展问题

173 阅读1分钟

根据上一个题目:青蛙只跳1或2可以得出是一个斐波那契问题,即a[n]=a[n-1]+a[n-2],那么能跳1,2,3个台阶时a[n]=a[n-1]+a[n-2]+a[n-3],......


依次类推,能推出本题的a[n]=a[n-1]+a[n-2]+......+a[1];由此得出代码:

public int jumpFloorII(int number) {
    int[] a=new int[number+1];
    a[0]=1;
    a[1]=1;
    for(int i=2;i<=number;i++){
        a[i]=0;
        for(int j=i-1;j>=0;j--){
            a[i]+=a[j];
        }
    }
    return a[number];
}

但是上述代码时间复杂度达到O(n^2),空间复杂度也达到O(n),重新看一下上述结论:

  • a[n]=a[n-1]+a[n-2]+......+a[1];..........................①

  • a[n-1]= a[n-2]+......+a[1]; ..........................②

两式相减可知:a[n]=2*a[n-1];所以代码进一步简化:

public int jumpFloorII(int target) {
    if (target < 2) {
        return 1;
    } else {
        int pre=1;
        int res=0;
   
        for (int i = 2; i <= target; i++) {
            res=2*pre;
            pre=res;
        }
        return res;
    }
}


题源:www.nowcoder.com/practice/22…