力扣算法刷题Day45|动态规划:爬楼梯 零钱兑换 完全平方数

力扣题目:#70. 爬楼梯

刷题时长:5min

解题方法:动态规划

复杂度分析

  • 时间复杂度: O(nm)
  • 空间复杂度: O(n)

问题总结

  • 条件判断背包容量时的逻辑是大于等于,漏掉了等于
  • 忘记dp数组初始化,递归五部曲,一步不能少

本题收获

  • 动规思路
    • 确定dp数组及下标的含义:爬到有i个台阶的楼顶,有dp[i]种方法
    • 确定递推公式:dp[i] += dp[i - j]
    • dp数组的初始化:dp[0] =1
    • 确定遍历顺序:将target放在外循环,将nums放在内循环,此题求排列

力扣题目:#322. 零钱兑换

刷题时长:30min

解题方法:动态规划

复杂度分析

  • 时间复杂度: O(n * amount),其中 n 为 coins 的长度
  • 空间复杂度: O(amount)

问题总结

  • 卡在无解的case,打印dp数组后才debug:若dp[amount]最后仍为初始化的值,则无解

本题收获

  • 动规思路
    • 确定dp数组及下标的含义:凑足总额为j所需钱币的最少个数为dp[j]
    • 确定递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j])
    • dp数组的初始化:dp[0] = 0, 下标非0的元素都是应该是最大值
    • 确定遍历顺序:coins(物品)放在外循环,target(背包)在内循环。且内循环正序

力扣题目:#279.完全平方数

刷题时长:10min

解题方法:动态规划

复杂度分析

  • 时间复杂度: O(n * √n)
  • 空间复杂度: O(n)

问题总结

  • 平方数数组不能剪枝,得计算到n^2,才能包含当n=1的边界情况

本题收获

  • 题意转换:完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品
  • 动规思路:题解方法
    • 确定dp数组及下标的含义:和为j的完全平方数的最少数量为dp[j]
    • 确定递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j])
    • dp数组的初始化:dp[0]=0,非0下标的dp[j]一定要初始为最大值,这样dp[j]在递推的时候才不会被初始值覆盖
    • 确定遍历顺序:外层for循环遍历物品,内层for遍历背包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值