Programming

Leetcode-70. Climbing Stairs

Leetcode-70. Climbing Stairs

<解題>


class Solution {
    public int climbStairs(int n) {
        if(n==1) return 1;
        if(n==2) return 2; //表示有兩個台階,有兩種爬法:一次爬一個台階,或者一次爬兩個台階,直接返回 2

        int[] a =  new int[n];
        a[0]=1; //代表爬 1 階樓梯的方法數為 1
        a[1]=2; //代表爬 2 階樓梯的方法數為 2

        for(int i=2;i<n;i++){
            a[i]=a[i-1]+a[i-2];
        }
        return a[n-1]; // 由於陣列索引是從 0 開始的,所以第 n 階樓梯的方法數對應到 a[n-1] 這個位置
    }
}

Time: O(n) Space: O(n)

<解題>

題目的想法,其實就是費波那契數列,只是這樣時間複雜度是O(2^n)太慢了


class Solution {
    public int climbStairs(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        return climbStairs(n-1) + climbStairs(n-2);
    }
}