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]
}
posted @ 2020-12-05 22:37  A毛毛  阅读(236)  评论(0编辑  收藏  举报