Golang | Leetcode Golang题解之第70题爬楼梯

题目描述:

一只青蛙一次可以跳上台阶的一级或两级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

解法1:递归

在这个问题中,我们可以使用一种自上而下的策略,这就需要我们定义一个递归函数。这个递归函数接收一个参数n,表示台阶的数量。如果n等于0,那么就应该返回0,因为在0级台阶上不能进行任何跳法。如果n等于1,那么就只有一种跳法,返回1。如果n等于2,那么有两种跳法,返回2。否则,就有两种选择,要么跳一级,要么跳两级,所以我们的结果是跳一级的情况的结果加上跳两级的情况的结果。




func climbStairs(n int) int {
    if n <= 1 {
        return n
    }
    return climbStairs(n-1) + climbStairs(n-2)
}

解法2:动态规划

虽然递归解法很直观,但是它效率很低,因为有很多重复的计算。我们可以使用一个数组来保存中间结果,这样就可以避免重复计算。




func climbStairs(n int) int {
    if n <= 1 {
        return n
    }
    dp := make([]int, n+1)
    dp[0] = 0
    dp[1] = 1
    for i := 2; i <= n; i++ {
        dp[i] = dp[i-1] + dp[i-2]
    }
    return dp[n]
}

解法3:线性动态规划

我们还可以进一步优化空间复杂度,使用线性的动态规划。




func climbStairs(n int) int {
    if n <= 1 {
        return n
    }
    a, b := 1, 2
    for i := 2; i < n; i++ {
        a, b = b, a+b
    }
    return b
}

以上就是三种解法,分别是递归,动态规划,和线性动态规划。递归的方法效率很低,动态规划和线性动态规划的方法效率较高。

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日