完美世界演算法崗筆試題。
乙隻青蛙一次可以跳上1級台階,也可以跳上2級,但年幼的青蛙不能連續跳2級,求年幼青蛙跳上乙個n級的台階總共有多少種方法?相比原問題多了乙個限制條件,但整體思路類似。
(下面所有解法都不考慮資料溢位問題)
解法一:遞迴
假設n級台階有f(n)種跳法,則有 f(
n)=該解法比較容易理解,但顯然遞迴解法效率是很低的,我們很容易想到利用動態規劃來解決它。
解法二:動態規劃
利用陣列儲存每次計算得到的值,避免重複計算。
主要思路與解法一類似,只不過從遞迴計算變成了迭代的陣列計算。
這裡給出自底向上的動態規劃解法:
int jump(int n)
for (int i = 3; i <= n; ++i)
return v[n][0];
}
顯然時間複雜度為o(n)。
解法三:組合數學
把問題抽象成簡單數學模型,假設有x次2級跳,y次1級跳,則x、y必定滿足如下關係式:
int jump(int n)
return total;
}時間複雜度o(n)。
演算法 青蛙跳台階
1.乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。典型的斐波那契數列 2.青蛙跳台階plus版本 乙隻青蛙一次可以跳上1級台階,也可以跳上2級 它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。關於本題,前提是n個台階會有一次n階的跳法。分析如...
青蛙跳台階演算法分析
青蛙跳台階問題在面試中經常會被問到,如果你之前沒聽過這個演算法問題,那麼在面試短時間內能給出完整的答案還是有一定的難度的,但是其實也並不算很難,看完這篇文章,相信你會恍然大悟的。乙隻青蛙一次可以跳一級台階,也可以一次跳兩級台階,現在有 n 級台階,問青蛙一共有多少種跳法?咋一看到這種問題,好像沒有什...
演算法練習 青蛙跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 看過有網上有特解的方法,但是我感覺不合適,因為想解法應該是找到普遍的規律才應該算是中規中矩。當不知道解題思路的就可以先將前幾次,比如說有 1,2,3,4,5級台階的跳法算出來,比較簡單...