golang 爬楼梯算法
问题
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数
实现思路:
1. 递归:踏上第n台阶之前,可能位于 第n-1个台阶 或 第n-2个台阶
2. 备忘map:缓存已经算过的记录,减少子问题个数,降低时间复杂度
代码:
package main
import (
"fmt"
)
var mapData = make(map[int]int, 0)
func main() {
num := climbStairs(20)
fmt.Println(num)
}
func climbStairs(n int) int {
switch n {
case 1:
return 1
case 2:
return 2
}
if _, ok := mapData[n]; !ok {
mapData[n] = climbStairs(n-1) + climbStairs(n-2)
}
return mapData[n]
}