题目
70. 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?
Example 1:
Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Example 2:
Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step
动态规划解法
假设下一步就达到N,那么前一步要么是f(n-1), 或者是f(n-2)。因为可以选择一步,或者两步到达终点。这就产生了递推公式 f(n) = f(n-1) + f(n-2)
, 其中f(1)=1
, f(2)=2
. 也就是两种走法之和。结果就是res[n]
.
class ClimbingStairs:
def climbStairsWithDP(self, n: int) -> int:
if n == 1:
return 1
if n == 2:
return 2
res = [0] * (n + 1)
res[1] = 1
res[2] = 2
for i in range(3, n+1):
res[i] = res[i - 1] + res[i -2]
return res[n]
斐波那系数解法
因为中间结果都不需要存储,那么直接用两个变量存储前两个值就好。
class ClimbingStairs:
def climbStairs(self, n: int) -> int:
c1 = 1
if n == 1:
return 1
c2 = 2
for i in range(3, n+1):
c1, c2 = c2, c1 + c2
return c2