leetcode动态规划题目总结
Hello everyone, I am a Chinese noob programmer. I have practiced questions on leetcode.com for 2 years. During this time, I studied a lot from many Great Gods' articles. After worship, I always wanted to write an article as they did, and now I take the courage to write my first article here.
This is an article summarizing topics related to dynamic programming. Its main inspiration comes from these two articles: Dynamic Programming Patterns and 怎样学好动态规划? - 穷码农的回答 - 知乎. DP is always a very difficult problem for me and lately, I have done dozens of questions to improve my DP skills. But the DP problem is so flexible that random practice has little effect. Therefore, I made further improvements based on these two articles and summarize some typical topics of DP problem. I hope this article can help you.
In this article, all problems come from leetcode.com and leetcode-cn.com which is a Chinese version of leetcode.com. By the way, because I am Chinese, I attached the Chinese translation after the English topics so that I can use this article more convenient in the future. Moreover, can anyone tell me how to create a table of contents? I wrote this article with VSCode and attempted many extensions to do this but all of them failed. I will be very grateful if you can tell me a way to achieve this function.
I will continue practicing DP problems on leetcode.com and will keep updating this article. If you have any better suggestions or supplements, welcome to put them in the comment area and @me. Now the main text begins.
1. Number Tower,数塔
- 118. Pascal's Triangle
(Easy)
、118. 杨辉三角(简单)
- 119. Pascal's Triangle II
(Easy)
、119. 杨辉三角 II(简单)
- 64. Minimum Path Sum
(Medium)
、64. 最小路径和(中等)
- 120. Triangle
(Medium)
、120. 三角形最小路径和(中等)
- 931. Minimum Falling Path Sum
(Medium)
、931. 下降路径最小和(中等)
- 1289. Minimum Falling Path Sum II
(hard)
、1289. 下降路径最小和 II(困难)
- 1301. Number of Paths with Max Score
(hard)
、1301. 最大得分的路径数目(困难)
2. Fibonacci Numbers,斐波那契数列
- Fibonacci numbers,斐波那契数列问题
- 509. Fibonacci Number
(Easy)
、509. 斐波那契数(简单)
- 1137. N-th Tribonacci Number
(Easy)
、1137. 第 N 个泰波那契数(简单)
- 509. Fibonacci Number
- Staircase,爬楼梯问题
- 70. Climbing Stairs
(Easy)
、70. 爬楼梯(简单)
- 746. Min Cost Climbing Stairs
(Easy)
、746. 使用最小花费爬楼梯(简单)
- 70. Climbing Stairs
- House thief,偷房子问题
- 198. House Robber
(Easy)
、198. 打家劫舍(简单)
- 213. House Robber II
(Medium)
、213. 打家劫舍 II(中等)
- 198. House Robber
3. Memory Search,记忆化搜索
- 139. Word Break
Medium
、139. 单词拆分中等
- 140. Word Break II
Hard
、140. 单词拆分 II困难
- 329. Longest Increasing Path in a Matrix
Hard
、329. 矩阵中的最长递增路径困难
- 1857. Largest Color Value in a Directed Graph
Hard
、1857. 有向图中最大颜色值困难
4. 0/1 Knapsack, 0/1 背包
- Equal Subset Sum Partition,相等子集划分问题
- 416. Partition Equal Subset Sum
(Medium)
、416. 分割等和子集(中等)
- 416. Partition Equal Subset Sum
- Subset Sum,子集和问题
- 494. Target Sum
(Medium)
、494. 目标和(中等)
- 494. Target Sum
- Minimum Subset Sum Difference,子集和的最小差问题
- 1049. Last Stone Weight II
(Medium)
、1049. 最后一块石头的重量 II(中等)
- 1049. Last Stone Weight II
- Other,其它
5. Unbounded Knapsack,无限(完全)背包
- Coin Change,换硬币问题
- 322. Coin Change
(Medium)
、322. 零钱兑换(中等)
- 518. Coin Change 2
(Medium)
、518. 零钱兑换 II(中等)
- 322. Coin Change
- Others,其它
- 377. Combination Sum IV
(Medium)
、377. 组合总和 Ⅳ(中等)
- 638. Shopping Offers
(Medium)
、638. 大礼包(中等)
- 1449. Form Largest Integer With Digits That Add up to Target
(Hard)
、1449. 数位成本和为目标值的最大数字(困难)
- 377. Combination Sum IV
6. Counting DP,计数 DP
- 62. Unique Paths
(Medium)
、62. 不同路径(中等)
- 63. Unique Paths II
(Medium)
、63. 不同路径 II(中等)
- 91. Decode Ways
(Medium)
、91. 解码方法(中等)
- 576. Out of Boundary Paths
(Medium)
、576. 出界的路径数(中等)
- 790. Domino and Tromino Tiling
(Medium)
、790. 多米诺和托米诺平铺(中等)
- 935. Knight Dialer
(Medium)
、935. 骑士拨号器(中等)
- 1155. Number of Dice Rolls With Target Sum
(Medium)
、1155. 掷骰子的 N 种方法(中等)
- 1641. Count Sorted Vowel Strings
(Medium)
、1641. 统计字典序元音字符串的数目(中等)
- 1220. Count Vowels Permutation
(Hard)
、1220. 统计元音字母序列的数目(困难)
- 1223. Dice Roll Simulation
(Medium)
、1223. 掷骰子模拟(中等)
- 552. Student Attendance Record II
(Hard)
、552. 学生出勤记录 II(困难)
- 1269. Number of Ways to Stay in the Same Place After Some Steps
(Hard)
、1269. 停在原地的方案数(困难)
- 1420. Build Array Where You Can Find The Maximum Exactly K Comparisons
(Hard)
、1420. 生成数组(困难)
- 1575. Count All Possible Routes
(Hard)
、1575. 统计所有可行路径(困难)
- 1639. Number of Ways to Form a Target String Given a Dictionary
(Hard)
、5542. 通过给定词典构造目标字符串的方案数(困难)
- 1866. Number of Ways to Rearrange Sticks With K Sticks Visible
(Hard)
、1866. 恰有 K 根木棍可以看到的排列数目(困难)
7. Probability DP,概率 DP
- 688. Knight Probability in Chessboard
(Medium)
、688-cn. “马”在棋盘上的概率(中等)
- 808. Soup Servings
(Medium)
、808. 分汤(中等)
8. Tree DP,树状 DP
- 96. Unique Binary Search Trees
(Medium)
、96. 不同的二叉搜索树(中等)
- 823. Binary Trees With Factors
(Medium)
、823. 带因子的二叉树(中等)
- 1130. Minimum Cost Tree From Leaf Values
(Medium)
、1130. 叶值的最小代价生成树(中等)
- 968. Binary Tree Cameras
(Hard)
、968. 监控二叉树(困难)
9. Optimal Solution,最优解问题
- Math,数学相关
- 279. Perfect Squares
(Medium)
、279. 完全平方数(中等)
- 368. Largest Divisible Subset
(Medium)
、368. 最大整除子集(中等)
- 646. Maximum Length of Pair Chain
(Medium)
、646. 最长数对链(中等)
- 650. 2 Keys Keyboard
(Medium)
、650. 只有两个键的键盘(中等)
- 801. Minimum Swaps To Make Sequences Increasing
(Medium)
、801. 使序列递增的最小交换次数(中等)
- 813. Largest Sum of Averages
(Medium)
、813. 最大平均值和的分组(中等)
- 1262. Greatest Sum Divisible by Three
(Medium)
、1262. 可被三整除的最大和(中等)
- 1537. Get the Maximum Score
(Hard)
、1537. 最大得分(困难)
- 279. Perfect Squares
- Buy and Sell Stock,股票买卖问题
- 309. Best Time to Buy and Sell Stock with Cooldown
(Medium)
、309. 最佳买卖股票时机含冷冻期(中等)
- 714. Best Time to Buy and Sell Stock with Transaction Fee
(Medium)
、714. 买卖股票的最佳时机含手续费(中等)
- 983. Minimum Cost For Tickets
(Medium)
、983. 最低票价(中等)
- 123. Best Time to Buy and Sell Stock III
(Hard)
、123. 买卖股票的最佳时机 III(困难)
- 188. Best Time to Buy and Sell Stock IV
(Hard)
、188. 买卖股票的最佳时机 IV(困难)
- 309. Best Time to Buy and Sell Stock with Cooldown
- Paint House,粉刷房子问题
- 256. Paint House
(Easy)
、256. 粉刷房子(简单)
- 265. Paint House II
(Hard)
、265. 粉刷房子 II(困难)
- 1473. Paint House III
(Hard)
、1473. 给房子涂色 III(困难)
- 256. Paint House
- Job Schedule,工作计划问题
- Minimum Number of Operations,最少操作次数问题
- 1824. Minimum Sideway Jumps
(Medium)
、1824. 最少侧跳次数(中等)
- 1187. Make Array Strictly Increasing
(Hard)
、1187. 使数组严格递增(困难)
- 514. Freedom Trail
(Hard)
、514. 自由之路(困难)
- 1787. Make the XOR of All Segments Equal to Zero
(Hard)
、1787. 使所有区间的异或结果为零(困难)
- 1883. Minimum Skips to Arrive at Meeting On Time
(Hard)
、1883. 准时抵达会议现场的最小跳过休息次数(困难)
- 1824. Minimum Sideway Jumps
10. Can I Win? 博弈 DP
- 292. Nim Game
(Easy)
、292. Nim 游戏(简单)
- 1025. Divisor Game
(Easy)
、1025. 除数博弈(简单)
- 464. Can I Win
(Medium)
、464. 我能赢吗(中等)
- 486. Predict the Winner
(Medium)
、486. 预测赢家(中等)
- 877. Stone Game
(Medium)
、877. 石子游戏(中等)
- 1140. Stone Game II
(Medium)
、1140. 石子游戏 II(中等)
- 1406. Stone Game III
(Hard)
、1406. 石子游戏 III(困难)
- 1510. Stone Game IV
(Hard)
、1510. 石子游戏 IV(困难)
11. Interval DP,区间 DP
- Intervals Merge,区间合并
- 312. Burst Balloons
(Hard)
、312. 戳气球(困难)
- 546. Remove Boxes
(Hard)
、546. 移除盒子(困难)
- 664. Strange Printer
(Hard)
、664. 奇怪的打印机(困难)
- 1478. Allocate Mailboxes
(Hard)
、1478. 安排邮筒(困难)
- 1547. Minimum Cost to Cut a Stick
(Hard)
、1547. 切棍子的最小成本(困难)
- 1563. Stone Game V
(Hard)
、1563. 石子游戏 V(困难)
- 312. Burst Balloons
- Triangulation,三角剖分
- Rectangle Segmentation,矩形分割
- 221. Maximal Square
(Medium)
、221. 最大正方形(中等)
- 1139. Largest 1-Bordered Square
(Medium)
、1139. 最大的以 1 为边界的正方形(中等)
- 1277. Count Square Submatrices with All Ones
(Medium)
、1277. 统计全为 1 的正方形子矩阵(中等)
- 85. Maximal Rectangle
(Hard)
、85. 最大矩形(困难)
- 221. Maximal Square
12. Subsequence/Substring,子序列/子字符串
12.1. Longest Subsequence/Substring,最长子序列/子字符串
- Longest Common Substring,最长公共子串
- 718. Maximum Length of Repeated Subarray
(Medium)
、718. 最长重复子数组(中等)
- 718. Maximum Length of Repeated Subarray
- Longest Common Subsequence,最长公共子序列
- 1035. Uncrossed Lines
(Medium)
、1035. 不相交的线(中等)
- 1143. Longest Common Subsequence
(Medium)
、1143. 最长公共子序列(中等)
- 1458. Max Dot Product of Two Subsequences
(Hard)
、1458. 两个子序列的最大点积(困难)
- 1035. Uncrossed Lines
- Longest Increasing Subsequence,最长上升子序列
- 674. Longest Continuous Increasing Subsequence
(Easy)
、674. 最长连续递增序列(简单)
- 300. Longest Increasing Subsequence
(Medium)
、300. 最长上升子序列(中等)
- 673. Number of Longest Increasing Subsequence
(Medium)
、673. 最长递增子序列的个数(中等)
- 354. Russian Doll Envelopes
(Hard)
、354. 俄罗斯套娃信封问题(困难)
- 1626. Best Team With No Conflicts
(Hard)
、1626. 无矛盾的最佳球队(困难)
- 674. Longest Continuous Increasing Subsequence
- Shortest Common Super-sequence,最短公共超级子序列
- Others,其它
12.2. Palindromic Subsequence/Substring,回文子序列/子字符串
- Longest Palindromic Subsequence,最长回文子序列
- Longest Palindromic Substring,最长回文子字符串
- 5. Longest Palindromic Substring
(Medium)
、5. 最长回文子串(中等)
- 5. Longest Palindromic Substring
- Count Palindromic Subsequences/Substrings,回文子序列/子字符串的个数
- 647. Palindromic Substrings
(Medium)
、647. 回文子串(中等)
- 730. Count Different Palindromic Subsequences
(Hard)
、730. 统计不同回文子字符串(困难)
- 647. Palindromic Substrings
- Palindromic Partitioning,回文分割
- 131. Palindrome Partitioning
(Medium)
、131. 分割回文串(中等)
- 132. Palindrome Partitioning II
(Hard)
、132. 分割回文串 II(困难)
- 1278. Palindrome Partitioning III
(Hard)
、1278. 分割回文串 III(困难)
- 1745. Palindrome Partitioning IV
(Hard)
、1745. 回文串分割 IV(困难)
- 131. Palindrome Partitioning
13. String,字符串上的动态规划
13.1. String Transform,字符串变换
- 583. Delete Operation for Two Strings
(Medium)
、583. 两个字符串的删除操作(中等)
- 712. Minimum ASCII Delete Sum for Two Strings
(Medium)
、712. 两个字符串的最小 ASCII 删除和(中等)
- 72. Edit Distance
(Hard)
、72. 编辑距离(困难)
- 97. Interleaving String
(Hard)
、97. 交错字符串(困难)
- 1312. Minimum Insertion Steps to Make a String Palindrome
(Hard)
、1312. 让字符串成为回文串的最少插入次数(困难)
13.2. Regular Expression Matching,正则表达式匹配
- 678. Valid Parenthesis String
(Medium)
、678. 有效的括号字符串(中等)
- 10. Regular Expression Matching
(Hard)
、10. 正则表达式匹配(困难)
- 44. Wildcard Matching
(Hard)
、44. 通配符匹配(困难)
- 639. Decode Ways II
(Hard)
、639. 解码方法 2(困难)
14. Multi-start state,多起始状态
- 741. Cherry Pickup
(Hard)
、741. 摘樱桃(困难)
- 1320. Minimum Distance to Type a Word Using Two Fingers
(Hard)
、1320. 二指输入的的最小距离(困难)
- 1463. Cherry Pickup II
(Hard)
、1463. 摘樱桃 II(困难)
15. DP Optimizition,DP 优化
- 837. New 21 Game
(Medium)
、837. 新 21 点(中等)
- 1340. Jump Game V
(Hard)
、1340. 跳跃游戏 V(困难)
- 1696. Jump Game VI
(Medium)
、1696. 跳跃游戏 VI(中等)
- 1416. Restore The Array
(Hard)
、1416. 恢复数组(困难)
- 1425. Constrained Subset Sum
(Hard)
、1425. 带限制的子序列和(困难)
- 1434. Number of Ways to Wear Different Hats to Each Other
(Hard)
、1434. 每个人戴不同帽子的方案数(困难)
- 1444. Number of Ways of Cutting a Pizza
(Hard)
、1444. 切披萨的方案数(困难)
- 1621. Number of Sets of K Non-Overlapping Line Segments
(Hard)
、1621. 5527. 大小为 K 的不重叠线段的数目(Hard)
15. Bitmask DP,状态压缩 DP
- 1125. Smallest Sufficient Team
(Hard)
、1125. 最小的必要团队(困难)
- 1349. Maximum Students Taking Exam
(Hard)
、1349. 参加考试的最大学生数(困难)
- 1655. Distribute Repeating Integers
(Hard)
、1655. 分配重复整数(困难)
- 1799. Maximize Score After N Operations
(Hard)
、1799. N 次操作后的最大分数和(困难)
- 1815. Maximum Number of Groups Getting Fresh Donuts
(Hard)
、1815. 得到新鲜甜甜圈的最多组数(困难)
- 1879. Minimum XOR Sum of Two Arrays
(Hard)
、1879. 两个数组最小的异或值之和(困难)
16. 轮廓线动态规划
- 1659. Maximize Grid Happiness
(Hard)
、1659. 最大化网格幸福感(困难)
Thanks for your browsing and best wishes to you.
leetcode动态规划题目总结的更多相关文章
- [LeetCode] 动态规划入门题目
最近接触了动态规划这个厉害的方法,还在慢慢地试着去了解这种思想,因此就在LeetCode上面找了几道比较简单的题目练了练手. 首先,动态规划是什么呢?很多人认为把它称作一种"算法" ...
- [leetcode]55.JumpGame动态规划题目:跳数游戏
/** * Given an array of non-negative integers, you are initially positioned at the first index of th ...
- 快速上手leetcode动态规划题
快速上手leetcode动态规划题 我现在是初学的状态,在此来记录我的刷题过程,便于以后复习巩固. 我leetcode从动态规划开始刷,语言用的java. 一.了解动态规划 我上网查了一下动态规划,了 ...
- poj 动态规划题目列表及总结
此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...
- POJ 动态规划题目列表
]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322 ...
- LeetCode高频题目(100)汇总-Java实现
LeetCode高频题目(100)汇总-Java实现 LeetCode高频题目(100)汇总-Java实现 目录 第01-50题 [Leetcode-easy-1] Two Sum [Le ...
- [SinGuLaRiTy] 动态规划题目复习
[SinGuLaRiTy-1026] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [UVA 1025] A Spy in the Metr ...
- LeetCode算法题目解答汇总(转自四火的唠叨)
LeetCode算法题目解答汇总 本文转自<四火的唠叨> 只要不是特别忙或者特别不方便,最近一直保持着每天做几道算法题的规律,到后来随着难度的增加,每天做的题目越来越少.我的初衷就是练习, ...
- LeetCode SQL题目(第一弹)
LeetCode SQL题目 注意:Leetcode上的SQL编程题都提供了数据表的架构程序,只需要将它贴入本地数据库即可调试自己编写的程序 不管是MS-SQL Server还是MySQL都需要登陆才 ...
随机推荐
- 人人都爱Kubernetes,Docker难道就不香了吗?
开篇 提起Docker,有很多人第一印象会认为它就是一个虚拟化容器,所以大家特别容易陷入到一种误区,就是觉得Docker只是在Linux操作系统之上又增加了一层,就跟OS上跑了一个VMWare一样.D ...
- [笔记] 《c++ primer》书店程序 Chapter7
Sales_data.h 1 #ifndef SALES_DATA_H 2 #define SALES_DATA_H 3 4 #include "Version_test.h" 5 ...
- [刷题] 226 Invert Binary Tree
要求 翻转一棵二叉树 实现 翻转左右子树,交换左右子树的根节点 1 class Solution { 2 public: 3 TreeNode* invertTree(TreeNode* root) ...
- shell 获取MySQL查询结果并处理
主要应用到shell for循环 定义数据库连接信息 HOST_NAME='127.0.0.1' DB_PORT='3306' DB_NAME='数据库名' USER_NAME='root' PASS ...
- reboot 就是 poweroff 然后power on
halt Shut down and halt the system poweroff Shut down and power-off the system reboot [ARG] Shut dow ...
- C语言的指针数组与指针数组
一.指针数组与指针数组 1,指针数组 顾名思义,即一个元素全部是指针的数组,其形式与普通数组相似,形式如 *a[N]. 在理解指针数组的使用方式前,我先来说下我个人对数组的理解. 比如一维整形数组(形 ...
- 科普 AF摄像头
AF(Auto Focus)自动对焦:自动对焦有两种方式,根据控制原理分为主动式和被动式两种.主动式自动对焦通过相机发射红外线,根据反射回来的射线信号确定被摄体的距离,再自动调节镜头,实现自动对焦.被 ...
- 并发王者课-青铜5:一探究竟-如何从synchronized理解Java对象头中的锁
在前面的文章<青铜4:synchronized用法初体验>中,我们已经提到锁的概念,并指出synchronized是锁机制的一种实现.可是,这么说未免太过抽象,你可能无法直观地理解锁究竟是 ...
- System Verilog过程块和方法
- 服务器ip迁移纪要
21楼机房之前已配25网段静态ip,机架上14台服务器接22楼机房交换机,同样25网段. 实际有两种情况, a.25网段ip没有被他人占用,这种情况无需更改ip. b.该IP已被外部使用,ip冲突,无 ...