---
title: "#70 Climbing Stairs"
tags: LeetCode, Top100
---
#70 Climbing Stairs
==
題目描述
--
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
--
>Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
解題思維
--
就是一個費式數列,可以用暴力解、遞迴解、DP解、公式解。
這邊用DP解。
Dynamic Programming
--
```python=
class Solution:
def climbStairs(self, n: int) -> int:
if n == 1:
return 1
dp = []
dp.append(1)
dp.append(2)
for i in range(2, n):
dp.append(dp[i-1]+dp[i-2])
return dp[n-1]
```
題外話
--
下面順便練習一下遞迴解與尾遞迴
#### 遞迴
>不過數字太大,記憶體就直接炸開了
```python=
class Solution:
def climbStairs(self, n: int) -> int:
def Recursive(n):
if n <= 2:
return n
else:
return Recursive(n-1)+Recursive(n-2)
return Recursive(n)
```
#### 尾遞迴
>不過尾遞迴需要有編譯器支援才能轉成迭代,不然還是會占用記憶體位置。
```python=
class Solution:
def climbStairsTailRecursive(self, n: int) -> int:
def TailRecursive(n, right=1, left=0):
if n == 1:
return left+right
else:
return TailRecursive(n-1, left+right, right)
return TailRecursive(n)
```