LeetCode 70 爬樓梯 Java 用時0ms

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

示例 1:

輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1.  1 階 + 1 階
2.  2 階

示例 2:

輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
1.  1 階 + 1 階 + 1 階
2.  1 階 + 2 階
3.  2 階 + 1 階

實則就是斐波拉切數列問題,可以採取遞歸方法,但超出時間限制。優化遞歸方法,採用尾遞歸!

代碼如下:

class Solution {
    public int climbStairs(int n) {
        return F(n, 1,1);
    }
    public int F(int n, int ret1, int ret2) {
        if (n == 0)
            return ret1;
        return F(n - 1, ret2, ret1 + ret2);      //尾遞歸,保存上一次信息 
    }
}

附上AC成功圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章