劍指offer 青蛙跳台階的解析與實現

2021-07-13 11:40:23 字數 1736 閱讀 8217

(1)乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。

(2)乙隻青蛙一次可以跳上1級台階,也可以跳上2 級……它也可以跳上n 級,此時該青蛙跳上乙個n級的台階總共有多少種跳法?

問題一

分析:當n=1,有一種跳法

當n=2,一次跳乙個跳兩次,一次跳兩個跳一次,共兩種跳法

當n>=2時,n個台階,設有f(n)種跳法

(1)若第一次選擇跳1個台階,那麼剩下的n-1個台階有f(n-1)種跳法

(2)若第一次選中跳2個台階,那麼剩下的n-2個台階有f(n-2)種跳法

所以當有n個台階時 f(n) = f(n-1)+f(n-2)種跳法。

此問題可以歸結為斐波那契數列問題(需要注意的是斐波那契數列的第二項是1,此問題當n=2時是2)

實現方式有兩種

(1)迭代 建議使用該方法 牛客網執行時間顯示為32ms

public int jumpfloor(int target) 

else

return result;

}

(2)遞迴  但是時間複雜度高 該方法牛客網執行顯示是635ms

public int jumpfloor2(int target) 

else

}}

問題二

分析:當n=1,有1種跳法

當n=2,一次跳乙個跳兩次,一次跳兩個跳一次,共兩種跳法

當n>=2時,n個台階,設有f(n)種跳法

第一次選擇跳1個,則剩下的n-1個有f(n-1)種跳法

第一次選擇跳2個,則剩下的n-2個有f(n-2)種跳法

....

第一次選擇跳n個,剩下n-n個台階有f(n-n)

f(0)=1;

f(n)=f(n-1)+f(n-2)+....+f(0)

f(n-1)=f(n-2)+f(n-3)+f(0)

兩式相減得  f(n)=2*f(n-1)

兩種方法執行時間差不多

方法一:遞迴法

public int jumpfloorii(int target)  

else

}

方法二:迭代法

public int jumpfloorii(int target)

else

return result;

}}

劍指offer 青蛙跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 這是一道比較簡單的動態規劃問題。n 1時,青蛙只能跳一次,即num 1 n 2時,青蛙可以有兩種方法,1 1,2 即num 2 n 3時,青蛙可以有三種方法,1 1 1,1 2,2 1...

劍指offer 青蛙跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 public class solution if target 1 if target 2 return jumpfloor target 1 jumpfloor target 2 乙...

劍指offer 青蛙跳台階I 青蛙跳台階 II

i 題目 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 斐波那契數列變體,關鍵是找出遞推公式。假設跳n級台階有f n 中跳法,容易發現f 1 1,f 2 2 n 2時,如果最後一次跳一級台階,一共有f n 1 種跳法,如果最後一次...