【刷题DAY44】70, 322, 279.md

70. 爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/

0x1 看到题目的第一想法

0x2 自己实现过程中遇到哪些困难

0x3 今日学习的文章链接,或者视频链接

0x4 看完代码随想录之后的想法

  • 完全背包
  • dp[i]:爬到有i个台阶的楼顶,有dp[i]种方法
    • 求装满背包有几种方法,公式都是:dp[j] += dp[j - nums[i]]
  • dp[0] = 1
  • 求排列问题,target放外层,nums放内层,从前向后遍历

0x5 今日收获,记录一下自己的学习时长

  • 1h

322. 零钱兑换

题目链接:https://leetcode.cn/problems/coin-change/

0x1 看到题目的第一想法

0x2 自己实现过程中遇到哪些困难

0x3 今日学习的文章链接,或者视频链接

0x4 看完代码随想录之后的想法

  • dp[j]:凑足总额为j所需钱币的最少个数为dp[j]
  • 凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])
    • dp[j] = min(dp[j - coins[i]] + 1, dp[j])
  • dp[0] = 0, 下标非0的元素是最大值
  • 本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数
    • :外层for循环遍历物品,内层for遍历背包或者外层for遍历背包,内层for循环遍历物品都可以

0x5 今日收获,记录一下自己的学习时长

  • 1h

279.完全平方数

题目链接:https://leetcode.cn/problems/perfect-squares/

0x1 看到题目的第一想法

0x2 自己实现过程中遇到哪些困难

  • 没明白我是哪里错了

0x3 今日学习的文章链接,或者视频链接

0x4 看完代码随想录之后的想法

  • dp[j]:和为j的完全平方数的最少数量为dp[j]
  • dp[j] 可以由dp[j - i i]推出, dp[j - i i] + 1 便可以凑成dp[j]
    • dp[j] = min(dp[j - i * i] + 1, dp[j])
  • dp[0] = 0, 非0下标的元素是最大值
  • 外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是

0x5 今日收获,记录一下自己的学习时长

  • 1h

总结

  • 完全背包
    • 求装满背包有几种方法,公式都是:dp[j] += dp[j - nums[i]]
    • 求最小个数:min(dp[j - coins[i]] + 1, dp[j])

复习

  • day19
    • 合并二叉树
      • 递归又忘了

待重点复习

70, 322, 279, 617