当前位置: 首页 > article >正文

【图解版】力扣第70题:爬楼梯

推理出状态表达式

在这里插入图片描述

  • f(5)表示到达第5层,所有可能的方法数。

  • 到达第5层,有可能是从第4层走一步上来,也有可能是从第3层走两步上来。所以我们可以慢慢延伸,画出上面👆🏻的图。

  • 从图中,我们可以看到,这些路径,就像这个树的每一个分支,只要数一下有多少个分支,那到第5层就有多少种路径。

  • f(4)表示了到达第4层的路径数量总和,f(3)表示到达第3层的路径数量的总和,所以f(5)的总数量:f(5) = f(4) + f(3)

  • 总结:f(n) = f(n - 1) + f(n - 2)

Golang代码实现

请添加图片描述

  • 代码实现的逻辑跟上面树状图的逻辑有点不太一样,上面只是得出f(n) = f(n - 1) + f(n - 2)的结论,这里是进行爬楼梯具体的代码实现,用到的是滚动的做法。
func climbStairs(n int) int {
    // 如果只有一层和两层,就直接返回n就行,题目规定1 <= n <= 45
    if n <= 2 {
        return n
    }

    // f1表示走到第一层可能有的方法数: 1种,直接走一步。总体上f1是表示f(n - 2)
    // f2表示走到第二层可能有的方法数:2种,走两步 or 走一步,再走一步。总体上f2是表示f(n - 1)
    // fn表示走到第n层可能有的方法数,初始化为0。总体上fn是表示f(n)
    f1, f2, fn := 1, 2, 0
    for i := 3; i <= n; i++ {       // 从第3层开始计算,计算到第n层刚好结束
        fn = f1 + f2				// f(n) = f(n - 2) + f(n - 1)
        f1 = f2						// f(n - 1)替换前面那个f(n - 2),成为新的f(n - 2)
        f2 = fn						// f(n) 替换前面那个f(n - 1)。成为新的f(n - 1)
    }
    return fn
}

http://www.kler.cn/a/377245.html

相关文章:

  • DDoS防护中的流量清洗与智能调度
  • 图解HTTP-HTTP状态码
  • B树的实现
  • 源码分析之Openlayers中GeometryCollection类
  • 谈谈JSON
  • 【MinIO系列】MinIO Client (mc) 完全指南
  • 《HelloGitHub》第 103 期
  • 如何在 Ubuntu 16.04 上设置 Jupyter Notebook 来运行 IPython
  • 虚拟机Ubuntu实现和宿主机之间的数据传输(只能复制粘贴,包过)
  • FPGA在高速数据采集系统中的应用!!!
  • 周末总结(2024/11/02)
  • C语言中的希尔排序
  • 如何取消 Jupyter Notebook 的密码和令牌
  • WebGL(Web Graphics Library)
  • Jenkins面试整理-如何处理 Jenkins 中的安全问题?
  • 用股票API获取高频行情数据来实现数据分析和量化
  • 计算机毕业设计Spark+大模型知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计
  • 【去哪里找开源商城项目】
  • 63 mysql 的 行锁
  • MybatisPlus入门(七)MybatisPlus-DQL编程控制
  • web3.0 开发实践
  • 高速比较器选型与性能优化
  • Istio 服务网格深度解析
  • TOEIC 词汇专题:娱乐休闲篇
  • C#语言垃圾回收机制(GC)以及实现细节
  • 跨平台OFD、PDF文档预览UTS插件