變態跳臺階

題目:

一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。

解析:

首先看一下基本情況:
F(0)一定是0,
F(1)=1,
F(2)=2,
F(3)=4, (1+1+1;1+2;2+1;3)
F(4)=8, (1+1+1+1;1+1+2;1+2+1;2+1+1;1+3;3+1;2+2;4)
...
我們可以看出,F(4)=1+F(3)+F(2)+F(1),其中1代表從下面直接一次跳4個臺階的這種可能性,F(3)代表從初始到第三個臺階的所有可能性,在這種情況下可以一步從3階上到4階;同理,也可以一步從2階到4階,一步從1階到4階。
故而,可以推理出,F(n) = F(N-1)+F(N-2)+F(N-3)+...+F(2)+F(1)+1;

代碼:

public class Solution {
    public int JumpFloorII(int target) {
        if(target <0 ) return 0;
        if(target <=2) return target;
        int[] dp = new int[target+1];
        dp[0]=0;
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=target;i++){
            dp[i]=1;
            for(int j=i-1;j>0;j--){
                dp[i]+=dp[j];
            }
        }
        return dp[target];
    }
}

這道題,關鍵就是把遞歸的公式找出來就好,不存在多少難度。
下面對于代碼的簡潔度上進行了優化:

import java.util.*;

public class Solution {
    public int JumpFloorII(int target) {
        int[] dp = new int[target+1];
        Arrays.fill(dp,1); //把數組所有的初始值設為1
        dp[0]=0; //除了dp[0]
        for(int i=2;i<=target;i++){
            for(int j=i-1;j>0;j--){
                dp[i]+=dp[j];
            }
        }
        return dp[target];
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 題目描述 一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種...
    Utte閱讀 495評論 0 0
  • 題目描述一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳...
    SeanC52111閱讀 239評論 0 0
  • 變態跳臺階 題目描述 一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階...
    echoVic閱讀 650評論 0 1
  • 如題 一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法...
    cuteximi_1995閱讀 442評論 0 2
  • 題目描述 一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種...
    云胡同學閱讀 378評論 0 0