【Golang 刷题之路】转世重修第七十题:爬楼梯

【Golang 刷题之路】转世重修第七十题:爬楼梯

Golang轻松学习


一、爬楼梯?

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

示例 1:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、详细代码

1.理清题目思路

  1. 要求是什么?n 通过 1,2组合有几种方式
  2. 条件是什么?只能通过1或2
  3. 优化是什么?通过每次将计算出的结果保留,让下一个数免于多次递归而只需根据上一次的结果进行计算

2.代码思路,带注释

代码如下(示例):

func climbStairs(n int) int {
	// 初始情况,p记录n-2的值,q记录n-1的值,r记录n的值
    p, q, r := 0, 0, 1
    // 如果 n 有值,那么n为 n-2 的值加上 n -1的值
    // 逆向推导,从第三个数开始,每个数都为前两个数的和
    for i := 0; i < n; i++ {
        p = q
        q = r
        r = p + q
    }
    // 此时结果即为最终结果
    return r
}

2.理解题解中的优秀代码,最节省内存的方式

	//dp[i] 代表有多少种爬楼梯的方式
	//递推公式
	// dp[i] = dp[i-1] + dp[i-2]
	if n <= 1 {
		return n
	}
	// 初始化
	dp := []int{1, 2}
	// 遍历 : 从前向后遍历
	// 举例子
	// 1 2 3 5 8 13 21
	// 优化点:循环从第三个数开始
	for i := 2; i < n; i++ {
		sum := dp[0] + dp[1]
		dp[0] = dp[1]
		// 优化点:只保留两个数,在最终时会再统计到数组中
		dp[1] = sum
	}
	return dp[1]

结果

在这里插入图片描述


总结

爬楼梯是通过每次将计算出的结果保留,让下一个数免于多次递归而只需根据上一次的结果进行计算。通过学习优秀代码,我们发现可以将结果作为下一次的条件等等方式来节省所存储的数,只存储两个数。我们的学习之路开始启程,路途遥远,只求风雨兼程。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫轻王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值