1. 程式人生 > >70,爬樓梯

70,爬樓梯

假設你正在爬樓梯。需要 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 階

 

斐波那契額數列

1: 1

2: 2

3: 3

4: 5

5: 8

6: 13

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

遞迴方法超時了

然後只能用陣列方法解決

class Solution {
    public int climbStairs(int n) {
        if(n==1) return 1;
        else if(n==2) return 2;
        else{
            int[] ans = new int[n];         
             ans[0]=1;
             ans[1]=2;
            for(int i=2;i<n;i++)
            {
                ans[i]=ans[i-1]+ans[i-2];
            }
          return  ans[n-1];  
        }
      
    }
}

 

採用動態規劃,空間也省了

class Solution {
    public int climbStairs(int n) {
//      採用動態規劃
        if(n==1) return 1;
        else if(n==2) return 2;
        else{
                
             int a=1;
             int b=2;
            int tmp=0;
            for(int i=2;i<n;i++)
            {  tmp=a+b;
               a=b;
               b=tmp;
            }
          return  tmp;  
        }
      
    }
}