LeetCode-70.爬楼梯

题目描述

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

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

示例

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
}