小編在求職找找工作期間劍指offer上的算法題刷了很多遍,並且每道題小編當時都總結了一種最適合面試時手撕算法的最優解法。考慮到劍指offer算法題在面試中的高頻出現,小編每天和大家分享一道劍指offer上的算法題,以及小編總結的答案。下面是第008道劍指offer算法題:
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
注:本題是典型的遞歸思路,理清本題的遞歸邏輯可以有助於加深對遞歸的理解。遞歸是二叉樹類算法題中的最常用解法。但是因爲遞歸有有一些重複計算,所以在遞歸的基礎上引出了對應的優化,這種優化思維非常重要,而且本題的優化思想也可以應用到其他類似可以遞歸求解的算法題中
- 遞歸法
對於第n個臺階來說,只能從n-1或者n-2的臺階跳上來,所以
F(n) = F(n-1) + F(n-2)
典型的斐波拉契數序列
class Solution {
public:
int jumpFloor(int number) {
if(number <= 0)
return 0;
else if(number <= 2)
return number;
else
return jumpFloor(number-1) + jumpFloor(number-2);
}
};
由上面的分析發現,本題本質是斐波那契數列,斐波那契數列的解法在 劍指offer算法題007 已經詳細分析了。下面是應用動態規劃的思想對遞歸解法的優化:
public class Solution {
public int JumpFloor(int target) {
if(target <= 0) return 0;
if(target <=2 ) return target;
int f = 1;
int g = 2;
while(target>1){
g = g + f;
f = g - f;
target--;
}
return f;
}
}
注:在牛客網上刷劍指offer題目時,最好使用牛客網自帶的編輯器,不建議使用IDE的代碼補全功能,因爲實際面試中是在A4紙上手寫代碼,是沒有代碼提示的。
有些題你看懂了,不代表你會了。看答案前或者看完答案第二天,動手在A4紙上寫寫代碼就知道自己是不是真的會了。
每天分享一道劍指offer算法題目,並且有最適合面試手撕算法環節的解法分享,歡迎大家關注我們~
其他文章
1. 學習筆記和學習資料彙總:前端 + 後端 + java + 大數據 + python + 100多實戰項目 + C++
3. 零基礎學爬蟲
4. 零基礎C++學習總結
歡迎關注個人公衆號【菜鳥名企夢】,公衆號專注:互聯網求職面經、java、python、爬蟲、大數據等技術分享:
公衆號菜鳥名企夢後臺發送“csdn”即可免費領取【csdn】和【百度文庫】下載服務;
公衆號菜鳥名企夢後臺發送“資料”:即可領取5T精品學習資料、java面試考點和java面經總結,以及幾十個java、大數據項目,資料很全,你想找的幾乎都有