面試經典算法問題-青蛙跳臺階


小青蛙跳臺階題目描述:

一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(前後次序不一樣算不一樣的結果)。java

不妨本身先去試一下,牛客oj -> 青蛙跳臺階1spa

我是答案:

感受用動態規劃很簡單。3d

青蛙到達第 i 階的方法總數 = 第 i -1 階方法數 + 第 i -2 階方法數code

代碼實現以下cdn

public class Solution {
    public int JumpFloor(int target) {
        if ( target == 1) {
        return 1;
    }
    int[] dp = new int[target + 1];
    dp[1] = 1;
    dp[2] = 2;
    for (int i = 3; i <= target; i++) {
        dp[i] = dp[i - 1] + dp[i -2];
    }
    return dp[target];
    }
}
複製代碼

大青蛙跳臺階題目描述:

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

不妨本身先去試一下,牛客oj -> 青蛙跳臺階2 get

我是答案:

用斐波那契的思想來解決it

/* 假設f(n)是n個臺階跳的次數。 1. f(1) = 1 2. f(2) 會有兩個跳得方式,一次1階或者2階,這回歸到了問題f(1),f(2) = f(2-1) + f(2-2) 3. f(3) 會有三種跳得方式,1階、2階、3階,那麼就是第一次跳出1階後面剩下:f(3-1);第一次跳出2階,剩下f(3-2);第一次3階,那麼剩下f(3-3).所以結論是f(3) = f(3-1)+f(3-2)+f(3-3) 4. f(n)時,會有n中跳的方式,1階、2階...n階,得出結論:f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1) == f(n) = 2*f(n-1) */
public class Solution {
    public int JumpFloorII(int target) {
        if(target==0) {
	    return 0;
        }
	if(target==1) {
	    return 1;
	}
	return 2 * JumpFloorII(target-1);
    }
}
複製代碼

相關文章
相關標籤/搜索