自学内容网 自学内容网

代码随想录算法训练营第三十九天|70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数

系列文章目录

代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素
代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
代码随想录算法训练营第三天|链表理论基础,203.移除链表元素,707.设计链表,206.反转链表
代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结
代码随想录算法训练营第五天|哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和,总结
代码随想录算法训练营第七天|344.反转字符串,541. 反转字符串II,卡码网:54.替换数字,151.翻转字符串里的单词,卡码网:55.右旋转字符串
代码随想录算法训练营第八天|28. 实现 strStr(),459.重复的子字符串,字符串总结,双指针回顾
代码随想录算法训练营第九天|理论基础,232.用栈实现队列,225. 用队列实现栈
代码随想录算法训练营第十天|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
代码随想录算法训练营第十一天|239. 滑动窗口最大值,347.前 K 个高频元素,总结
代码随想录算法训练营第十二天|理论基础,递归遍历,迭代遍历,统一迭代
代码随想录算法训练营第十三天|层序遍历10,226.翻转二叉树,101.对称二叉树
代码随想录算法训练营第十四天|104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数
代码随想录算法训练营第十五天|110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和
代码随想录算法训练营第十六天|513.找树左下角的值,112. 路径总和,113.路径总和ii,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树
代码随想录算法训练营第十七天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
代码随想录算法训练营第十八天|530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先
代码随想录算法训练营第十九天|235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点
代码随想录算法训练营第二十天|669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,总结篇
代码随想录算法训练营第二十一天|回溯算法理论基础,77. 组合
代码随想录算法训练营第二十二天|216.组合总和III,17.电话号码的字母组合
代码随想录算法训练营第二十三天|39. 组合总和,40.组合总和II,131.分割回文串
代码随想录算法训练营第二十四天|93.复原IP地址,78.子集,90.子集II
代码随想录算法训练营第二十五天|491.递增子序列,46.全排列,47.全排列 II
代码随想录算法训练营第二十六天|332.重新安排行程,51. N皇后,37. 解数独,总结
代码随想录算法训练营第二十七天|贪心算法理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和
代码随想录算法训练营第二十八天|122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II
代码随想录算法训练营第二十九天|1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果
代码随想录算法训练营第三十天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十一天|435. 无重叠区间,763.划分字母区间,56. 合并区间
代码随想录算法训练营第三十二天|738.单调递增的数字,968.监控二叉树,总结
代码随想录算法训练营第三十三天|动态规划理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
代码随想录算法训练营第三十四天|62.不同路径,63. 不同路径 II
代码随想录算法训练营第三十五天|343. 整数拆分,96.不同的二叉搜索树
代码随想录算法训练营第三十六天|背包理论基础,416. 分割等和子集
代码随想录算法训练营第三十七天|1049. 最后一块石头的重量 II,494. 目标和,474.一和零
代码随想录算法训练营第三十八天|完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ


70. 爬楼梯 (进阶)

题目链接: 70. 爬楼梯 (进阶)
题目内容: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。
视频讲解: 动态规划之完全背包,装满背包有几种方法?求排列数?| LeetCode:377.组合总和 Ⅳ

可以等同于完全背包问题:1阶,2阶,… m阶就是物品,楼顶就是背包。每一阶可以重复使用,例如跳了1阶,还可以继续跳1阶。问跳到楼顶有几种方法其实就是问装满背包有几种方法。

动态规划问题的五步曲:

  • 确定dp数组(dp table)以及下标的含义:爬到有i个台阶的楼顶,有dp[i]种方法

  • 确定递推公式:dp[i] += dp[i - j]

  • dp数组如何初始化:dp[0] = 1,下标非0的dp[j]初始化为0

  • 确定遍历顺序:这是背包里求排列问题,即:1、2 步 和 2、1 步都是上三个台阶,但是这两种方法不一样!所以需将target放在外循环,将nums放在内循环。每一步可以走多次,这是完全背包,内循环需要从前向后遍历。

  • 举例推导dp数组

322. 零钱兑换

题目链接: 322. 零钱兑换
题目内容: 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。
视频讲解: 动态规划之完全背包,装满背包最少的物品件数是多少?| LeetCode:322.零钱兑换

动态规划问题的五步曲:

  • 确定dp数组(dp table)以及下标的含义:凑足总额为j所需钱币的最少个数为dp[j]

  • 确定递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j])

  • dp数组如何初始化:dp[0] = 0,下标非0的元素都是应该是最大值

  • 确定遍历顺序:求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。

  • 举例推导dp数组

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        dp=[float('inf')]*(amount+1)
        dp[0]=0
        for coin in coins:
            for j in range(coin,amount+1):
                if dp[j-coin]!=float('inf'):
                    dp[j]=min(dp[j-coin]+1,dp[j])
        if dp[amount]==float('inf'):
            return -1
        return dp[amount]

279.完全平方数

题目链接: 279.完全平方数
题目内容: 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
视频讲解: 动态规划之完全背包,换汤不换药!| LeetCode:279.完全平方数

动态规划问题的五步曲:

  • 确定dp数组(dp table)以及下标的含义:和为j的完全平方数的最少数量为dp[j]
  • 确定递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j])
  • dp数组如何初始化:dp[0] = 0,下标非0的元素都是应该是最大值
  • 确定遍历顺序:外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的
  • 举例推导dp数组
class Solution:
    def numSquares(self, n: int) -> int:
        dp=[float('inf')]*(n+1)
        dp[0]=0
        for i in range(1,n+1):
            for j in range(1,int(i**0.5)+1):
                dp[i]=min(dp[i],dp[i-j*j]+1)
        return dp[n]

原文地址:https://blog.csdn.net/weixin_47748259/article/details/136389259

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!