---
# System prepended metadata

title: 70. Climbing Stairs
tags: [Leetcode, python, c++, Top 100 Liked Questions, easy, dynamic programming]

---

###### tags: `Leetcode` `easy` `dynamic programming` `python` `c++` `Top 100 Liked Questions`

# 70. Climbing Stairs

## [題目來源:] https://leetcode.com/problems/climbing-stairs/

## 題目:
You are climbing a staircase. It takes n steps to reach the top.

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

## 解題想法:
dp[n]: n階可以組合的數量 
dp[n]=dp[n-1]+dp[n-2]

## Python:
``` python=
class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        #最後希望return ans[n]值 所以array大小要是n+1最後一值才是ans[n]
        ans = [0]*(n+1)
        ans[0]=1
        ans[1]=1
        #i 從2~n
        for i in range(2,n+1):
            ans[i]=ans[i-1]+ans[i-2]
        return ans[n]
        
    

if __name__ == '__main__':
    result = Solution()
    n = 3
    ans = result.climbStairs(n)
    print(ans)
```

## C++:
``` cpp=
#include<iostream>
using namespace std;

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

int main(){
    Solution res;
    int n=5;
    int ans=res.climbStairs(n);
    cout<<ans<<endl;
    return 0;
}

```