題目來源:牛客網-劍指Offer專題
題目地址:跳臺階
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
題目解析
這是一道經典的遞推題目,你可以想如果青蛙當前在第n級臺階上,那它上一步是在哪裏呢?
顯然,由於它可以跳1級臺階或者2級臺階,所以它上一步必定在第n-1,或者第n-2級臺階,也就是說它跳上n級臺階的跳法數是跳上n-1和跳上n-2級臺階的跳法數之和。
設跳上 級臺階有 種跳法,則它跳上n級的臺階有 種跳法。
然後,我們又思考初始()的情況,跳上1級臺階只有1種跳法,跳上2級臺階有2種跳法,最終我們得到如下的遞推式:
這個遞推式和 比較相似,這裏就簡單寫常用的兩種實現方式,詳情可以參考上篇博客解法:斐波那契數列(四種解法)。
方法一:
面試別寫型遞推版實現,時間複雜度 。
public class Solution {
public int JumpFloor(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
return JumpFloor(n - 1) + JumpFloor(n - 2);
}
}
方法二:
面試推薦型,自底向上型循環求解,時間複雜度爲 。
public class Solution {
public int JumpFloor(int target) {
int a = 1, b = 1;
for (int i = 1; i < target; i++) {
a = a + b;
b = a - b;
}
return a;
}
}
如果本文對你有所幫助,要記得點贊哦~