根据不同的解答方法,总结leecode不同题型。
方法四:动态规划
动态规划题目的四个基本步骤:
- 定义子问题
- 写出子问题的递推关系
- 确定 DP 数组的计算顺序
- 空间优化(可选)
线性动态规划
198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 1:
1 | 输入:[1,2,3,1] |
解答:
1 | class Solution: |
740. 删除与获得点数
给定一个整数数组 nums
,你可以对它进行一些操作。
每次操作中,选择任意一个 nums[i]
,删除它并获得 nums[i]
的点数。之后,你必须删除每个等于 nums[i] - 1
或 nums[i] + 1
的元素。
开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。
示例 1:
1 | 输入: nums = [3, 4, 2] |
解答:
1 | class Solution: |
二维动态规划
583. 两个字符串的删除操作
给定两个单词 word1 和 word2*,找到使得 *word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
示例:
1 | 输入: "sea", "eat" |
解答:
1 | class Solution: |
背包问题
背包问题 是经典的动态规划问题,它一共有 9 个分类,建议耐心阅读,理解之后你的动态规划水平一定会有一个质的飞跃。
先来浏览一下这 9 个问题的名称:
- 01 背包问题
- 完全背包问题
- 多重背包问题
- 混合背包问题
- 二维费用背包问题
- 分组背包问题
- 背包问题求方案数
- 求背包问题的方案
- 有依赖的背包问题
322. 零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1
。
示例 1:
1 | 输入: coins = [1, 2, 5], amount = 11 |
解答:
1 | class Solution: |
总结:完全背包问题求最小值
面试题 08.11. 硬币
硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)
示例1:
1 | 输入: n = 5 |
1 | class Solution: |
总结:完全背包问题求方案数。