---
title: 'LeetCode 70. Climbing Stairs'
disqus: hackmd
---
# LeetCode 70. Climbing Stairs
## Description
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?
## Example
Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
## Constraints
1 <= n <= 45
## Answer
此題可用DP解法,和計算費氏數列的概念一樣。
```Cin=
//2022_03_30
int climbStairs(int n){
if(n < 3){return n;}
int i = 0, c1 = 1, c2 = 2, cn = 0;
for(i = 3; i <= n; i++){
cn = c1 + c2;
c1 = c2;
c2 = cn;
}
return cn;
}
```
也可用公式解來實現,
```Cin=
int climbStairs(int n){ //DP
int out[n+1] ; //存取每個階梯有幾種爬法的陣列,+1是給第0個
if(n == 1){return 1;}
out[0] = 0;
out[1] = 1; //給定初始值
out[2] = 2;
if(n>=3){
for(int i = 3;i <= n;i++){
out[i] = out[i-1] + out[i-2]; // 由子問題求解原問題
}
}
return out[n];
}
```
## Link
https://leetcode.com/problems/climbing-stairs/
###### tags: `Leetcode`