LeetCode 70. Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top.spa

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?code

 

一開始想用排列組合的方式,可是公式不太好些,後來想用遞歸的方式,最後剩一個臺階1種,最後剩2個臺階兩種,而後那個臺階至關於n-1個臺階的方法總數加上n-2個臺階的方法總數,可是這樣會超時。blog

最後用循環代替遞歸,臺階數不要倒着來,一個臺階一種,二個臺階2種,三個臺階種類數時一個臺階種類數加兩個臺階種類數以此類推。遞歸

class Solution {
public:
    int climbStairs(int n) {//最後一步能夠是一階或者兩階,上一個臺階只有一種走法,兩個臺階兩種走法,遞歸會超時
     vector<int> waysOfNSteps(n);
     if(n == 1){
         return 1;
     }
     else if(n == 2){
         return 2;
     }
     else{
         
         waysOfNSteps[0] = 1;
         waysOfNSteps[1] = 2;
         for(int i = 2 ;i<n;i++ ){
             waysOfNSteps[i] = waysOfNSteps[i-1]+waysOfNSteps[i-2];
         }
     }
     return waysOfNSteps[n-1];
        
    }
};
相關文章
相關標籤/搜索