Always keep a beginner's mind, don't |

Dancing-Pierre

园龄:1年10个月粉丝:3关注:0

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

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

题目
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

链接力扣Leetcode—初级算法—动态规划—爬楼梯.

示例1

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
(1) 1 阶 + 1 阶
(2) 2 阶

示例2

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
(1) 1 阶 + 1 阶 + 1 阶
(2) 1 阶 + 2 阶
(3) 2 阶 + 1 阶

标签:记忆化搜索、数学、动态规划

思路:我们先来画一个表格,这样可以更容易的看出解题思路

n方法总和
111
21+1   22
31+1+1   1+2   2+13
41+1+1+1   1+2+1   1+1+2   2+1+1   2+25
51+1+1+1+1   1+2+1+1   1+1+2+1   1+1+1+2   2+1+1+1   1+2+2   2+1+2   2+2+18

从表格看出其实是一个斐波那契数列,需要走 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 main
import "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))
}

提交截图
在这里插入图片描述

本文作者:Dancing-Pierre

本文链接:https://www.cnblogs.com/wyc-1009/p/17548161.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Dancing-Pierre  阅读(9)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起