[Golang]力扣Leetcode—初级算法—动态规划—爬楼梯(斐波那契数列)

题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
链接: 力扣Leetcode—初级算法—动态规划—爬楼梯.
示例1 :

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
(1) 1 阶 + 1 阶
(2) 2 阶
【[Golang]力扣Leetcode—初级算法—动态规划—爬楼梯(斐波那契数列)】示例2 :
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
(1) 1 阶 + 1 阶 + 1 阶
(2) 1 阶 + 2 阶
(3) 2 阶 + 1 阶
标签:记忆化搜索、数学、动态规划
思路:我们先来画一个表格,这样可以更容易的看出解题思路
n 方法 总和
1 1 1
2 1+12 2
3 1+1+11+22+1 3
4 1+1+1+11+2+11+1+22+1+12+2 5
5 1+1+1+1+11+2+1+11+1+2+11+1+1+22+1+1+11+2+22+1+22+2+1 8
... ... ...
从表格看出其实是一个斐波那契数列,需要走 n 阶你才能到达楼顶,每次只能爬 1 或 2 个台阶,不同的方法总数就等于 [(n-1阶总方法数)+(n-2阶总方法数)] ,那么代码就很简单了,先定义切片存放 n =1,2,3的时候的总方法数,再从 3 开始,遍历到总台阶数为 n ,用append方法一直给切片(slice)追加元素,追加到 sli[i-1]+sli[i-2] ,返回 len(sli)-1 就是不同方法数的总和。
主要Go代码如下:
package mainimport "fmt"// fibonacci数列(斐波那契数列) func climbStairs(n int) int { sli := []int{1, 2, 3} if n <= 3 { return sli[n-1] } for i := 3; i < n; i++ { sli = append(sli, sli[i-1]+sli[i-2]) } return sli[len(sli)-1] }func main() { n := 5 fmt.Println(climbStairs(n)) }

提交截图:
[Golang]力扣Leetcode—初级算法—动态规划—爬楼梯(斐波那契数列)
文章图片

    推荐阅读