LintCode | 111. 爬樓梯

假設你正在爬樓梯,需要n步你才能到達頂部。但每次你只能爬一步或者兩步,你能有多少種不同的方法爬到樓頂部?
題目鏈接

DP基礎題,不多說了。取模可以減少空間浪費。

public class Solution {
    /**
     * @param n: An integer
     * @return: An integer
     */
    public int climbStairs(int n) {
        if(n == 0) return 1;
        int[] dp = new int[3];
        dp[0] = 1;
        dp[1] = 2;
        for(int i = 2; i < n; i++) {
            dp[i % 3] = dp[(i - 1) % 3] + dp[(i - 2) % 3];
        }
        return dp[(n-1) % 3];
    }
}

習慣了DP的標準寫法,網上其他人的DP寫法有不用數組的,代碼如下,喜歡哪種見仁見智了。

public class Solution {
    /**
     * @param n: An integer
     * @return: An integer
     */
    public int climbStairs(int n) {
        int result = 1;
        int first = 1;
        int next = 1;
        while (--n > 0)
        {
            result = first + next;
            first = next;
            next = result;
        }

        return result;
    }
}
發佈了84 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章