假設你正在爬樓梯,需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個台階,你有多少種不同的方法可以爬到樓頂呢?


方法一:暴力法
算法

在暴力法中,我們將會把所有可能爬的階數進行組合,也就是 1 和 2 。而在每一步中我們都會繼續調用 climbStairsclimbStairs 這個函數模擬爬 11 階和 22 階的情形,並返回兩個函數的返回值之和。

public class Solution {
    public int climbStairs(int n) {
        climb_Stairs(0, n);
    }
    public int climb_Stairs(int i, int n) {
        if (i > n) {
            return 0;
        }
        if (i == n) {
            return 1;
        }
        return climb_Stairs(i + 1, n) + climb_Stairs(i + 2, n);
    }
}

方法二:斐波那契數

public class Solution {
    public int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        int first = 1;
        int second = 2;
        for (int i = 3; i <= n; i++) {
            int third = first + second;
            first = second;
            second = third;
        }
        return second;
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM