ARTS(3)

Algorithm

爬楼梯

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

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

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/climbing-stairs

解析
这个题目属于简单一类的,看到题目之后感觉很面熟,但是不会,想到的是排列组合,可能时间长一点会有点想法。没有去想,直接看的官方答案解析:

  • 首先通过递归,但是没有通过,以为时间复杂度 O(n²)
  • 对递归进行优化,存储递归中间的值,时间复杂度为 O(n)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
var memory:[Int] = []
func climbStairs(_ n: Int) -> Int {

for _ in 0..<n + 1 {
memory.append(0)
}
return climbStairsMeomory(n)
}


func climbStairsMeomory(_ n: Int ) -> Int {
if memory[n] > 0 {
return memory[n]
}

if n == 1 {
memory[n] = 1
}else if n == 2 {
memory[n] = 2
}else {
memory[n] = climbStairsMeomory(n - 1) + climbStairsMeomory(n - 2)
}


return memory[n]
}
}

Review

Tip

Share

-------------本文结束谢谢欣赏-------------
Alice wechat