LeetCode-70.爬楼梯

题目描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例

1
2
3
4
5
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
1
2
3
4
5
6
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

题解

动态规划:第n级台阶的方法数可能是从n-1级台阶上来的,也可能是第n - 2级台阶上来的,所以:f(n) = f(n-1) + f(n - 2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func climbStairs(_ n: Int) -> Int {
if n == 1 {
return 1
}
if n == 2 {
return 2
}
var preOfPre = 1
var pre = 2
for _ in 3 ..< n {
let cur = preOfPre + pre
preOfPre = pre
pre = cur
}
reture pre
}