Dynamic Programming Pattern: Template + 481 LeetCode Problems
Define a state, write the transition, and stop recomputing the same subproblem.
- 12 Easy
- 243 Medium
- 226 Hard
- O(states × transitions) time
What the dynamic programming pattern is
Dynamic programming applies when a problem has optimal substructure — the best answer is built from the best answers to smaller versions — and overlapping subproblems, meaning the naive recursion asks the same question many times. The work is entirely in the first line: choosing a state, the smallest set of numbers that fully describes a subproblem. Everything else follows, because the transition is just the answer to "what were the last choices that could have led here?" and the base case is the state small enough to answer without recursing. Write it as recursion with a cache first; that version is easier to get right because the transition reads like the problem statement. Convert to a bottom-up table only once it works, and only for the two things a table buys: no recursion limit, and the chance to notice that row i depends only on row i-1, which is what collapses an O(n·m) table into O(m) space.
When to use it
- The problem asks for a count, a maximum, a minimum, or whether something is possible — not for the arrangement itself.
- A greedy choice is provably wrong because a locally worse choice can lead to a better total.
- The naive recursion is exponential and its calls repeat with identical arguments.
- The input has an obvious ordering — a prefix, an index range, a remaining capacity — to index the state by.
The dynamic programming template in Python
The shape, not a solution to any one problem. Adapt the condition and the summary being maintained; the skeleton stays the same across the 481 problems listed below.
def rob(nums):
"""The canonical 1-D shape: dp[i] is the answer for the prefix nums[:i]."""
if not nums:
return 0
dp = [0] * (len(nums) + 1)
dp[1] = nums[0] # base case
for i in range(2, len(nums) + 1): # transition
dp[i] = max(dp[i - 1], # skip nums[i - 1]
dp[i - 2] + nums[i - 1]) # take it, so skip its neighbour
return dp[len(nums)]Complexity characteristics
- Time
- O(states × transitions)
- Auxiliary space
- O(states), frequently reducible
The running time is the number of distinct states multiplied by the work done at each one, which is why choosing the state is the whole problem: a one-dimensional state over a prefix gives O(n), a two-dimensional state over two strings gives O(n·m), and a bitmask state over n items gives O(2ⁿ·n). Memoised recursion and a bottom-up table share the same complexity and differ only in constant factors and stack depth. The space often collapses — when row i depends only on row i−1, an O(n·m) table becomes O(m).
All 481 dynamic programming LeetCode problems
Every problem in the library the dynamic programming pattern applies to, grouped by LeetCode's own difficulty rating. 416 of the 481 carry a complete Python solution with a worked example and complexity analysis; the rest are listed for completeness, with the LeetCode Premium ones marked.
Easy (12)
| # | Problem | Difficulty | Topics |
|---|---|---|---|
| 70 | Climbing Stairs | Easy | Memoization, Math, Dynamic Programming |
| 118 | Pascal's Triangle | Easy | Array, Dynamic Programming |
| 119 | Pascal's Triangle II | Easy | Array, Dynamic Programming |
| 121 | Best Time to Buy and Sell Stock | Easy | Array, Dynamic Programming |
| 338 | Counting Bits | Easy | Bit Manipulation, Dynamic Programming |
| 392 | Is Subsequence | Easy | Two Pointers, String, Dynamic Programming |
| 509 | Fibonacci Number | Easy | Recursion, Memoization, Math +1 |
| 746 | Min Cost Climbing Stairs | Easy | Array, Dynamic Programming |
| 1137 | N-th Tribonacci Number | Easy | Memoization, Math, Dynamic Programming |
| 1025 | Divisor Game | Easy | Brainteaser, Math, Dynamic Programming +1 |
| 1668 | Maximum Repeating Substring | Easy | String, Dynamic Programming, String Matching |
| 2900 | Longest Unequal Adjacent Groups Subsequence I | Easy | Greedy, Array, String +1 |
Medium (243)
| # | Problem | Difficulty | Topics |
|---|---|---|---|
| 5 | Longest Palindromic Substring | Medium | Two Pointers, String, Dynamic Programming |
| 22 | Generate Parentheses | Medium | String, Dynamic Programming, Backtracking |
| 45 | Jump Game II | Medium | Greedy, Array, Dynamic Programming |
| 53 | Maximum Subarray | Medium | Array, Divide and Conquer, Dynamic Programming |
| 55 | Jump Game | Medium | Greedy, Array, Dynamic Programming |
| 62 | Unique Paths | Medium | Math, Dynamic Programming, Combinatorics |
| 63 | Unique Paths II | Medium | Array, Dynamic Programming, Matrix |
| 64 | Minimum Path Sum | Medium | Array, Dynamic Programming, Matrix |
| 72 | Edit Distance | Medium | String, Dynamic Programming |
| 91 | Decode Ways | Medium | String, Dynamic Programming |
| 95 | Unique Binary Search Trees II | Medium | Tree, Binary Search Tree, Dynamic Programming +2 |
| 96 | Unique Binary Search Trees | Medium | Tree, Binary Search Tree, Math +2 |
| 97 | Interleaving String | Medium | String, Dynamic Programming |
| 120 | Triangle | Medium | Array, Dynamic Programming |
| 122 | Best Time to Buy and Sell Stock II | Medium | Greedy, Array, Dynamic Programming |
| 131 | Palindrome Partitioning | Medium | String, Dynamic Programming, Backtracking |
| 139 | Word Break | Medium | Trie, Memoization, Array +3 |
| 152 | Maximum Product Subarray | Medium | Array, Dynamic Programming |
| 198 | House Robber | Medium | Array, Dynamic Programming |
| 213 | House Robber II | Medium | Array, Dynamic Programming |
| 221 | Maximal Square | Medium | Array, Dynamic Programming, Matrix |
| 241 | Different Ways to Add Parentheses | Medium | Recursion, Memoization, Math +2 |
| 264 | Ugly Number II | Medium | Hash Table, Math, Dynamic Programming +1 |
| 279 | Perfect Squares | Medium | Breadth-First Search, Math, Dynamic Programming |
| 300 | Longest Increasing Subsequence | Medium | Array, Binary Search, Dynamic Programming |
| 309 | Best Time to Buy and Sell Stock with Cooldown | Medium | Array, Dynamic Programming |
| 313 | Super Ugly Number | Medium | Array, Math, Dynamic Programming |
| 322 | Coin Change | Medium | Breadth-First Search, Array, Dynamic Programming |
| 337 | House Robber III | Medium | Tree, Depth-First Search, Dynamic Programming +1 |
| 343 | Integer Break | Medium | Math, Dynamic Programming |
| 357 | Count Numbers with Unique Digits | Medium | Math, Dynamic Programming, Backtracking |
| 368 | Largest Divisible Subset | Medium | Array, Math, Dynamic Programming +1 |
| 375 | Guess Number Higher or Lower II | Medium | Math, Dynamic Programming, Game Theory |
| 376 | Wiggle Subsequence | Medium | Greedy, Array, Dynamic Programming |
| 377 | Combination Sum IV | Medium | Array, Dynamic Programming |
| 396 | Rotate Function | Medium | Array, Math, Dynamic Programming |
| 397 | Integer Replacement | Medium | Greedy, Bit Manipulation, Memoization +1 |
| 413 | Arithmetic Slices | Medium | Array, Dynamic Programming, Sliding Window |
| 416 | Partition Equal Subset Sum | Medium | Array, Dynamic Programming |
| 435 | Non-overlapping Intervals | Medium | Greedy, Array, Dynamic Programming +1 |
| 464 | Can I Win | Medium | Bit Manipulation, Memoization, Math +3 |
| 467 | Unique Substrings in Wraparound String | Medium | String, Dynamic Programming |
| 473 | Matchsticks to Square | Medium | Bit Manipulation, Array, Dynamic Programming +2 |
| 474 | Ones and Zeroes | Medium | Array, String, Dynamic Programming |
| 486 | Predict the Winner | Medium | Recursion, Array, Math +2 |
| 494 | Target Sum | Medium | Array, Dynamic Programming, Backtracking |
| 516 | Longest Palindromic Subsequence | Medium | String, Dynamic Programming |
| 518 | Coin Change II | Medium | Array, Dynamic Programming |
| 526 | Beautiful Arrangement | Medium | Bit Manipulation, Array, Dynamic Programming +2 |
| 542 | 01 Matrix | Medium | Breadth-First Search, Array, Dynamic Programming +1 |
| 553 | Optimal Division | Medium | Array, Math, Dynamic Programming |
| 576 | Out of Boundary Paths | Medium | Dynamic Programming |
| 583 | Delete Operation for Two Strings | Medium | String, Dynamic Programming |
| 638 | Shopping Offers | Medium | Bit Manipulation, Memoization, Array +3 |
| 646 | Maximum Length of Pair Chain | Medium | Greedy, Array, Dynamic Programming +1 |
| 647 | Palindromic Substrings | Medium | Two Pointers, String, Dynamic Programming |
| 650 | 2 Keys Keyboard | Medium | Math, Dynamic Programming |
| 673 | Number of Longest Increasing Subsequence | Medium | Binary Indexed Tree, Segment Tree, Array +1 |
| 678 | Valid Parenthesis String | Medium | Stack, Greedy, String +1 |
| 688 | Knight Probability in Chessboard | Medium | Dynamic Programming |
| 698 | Partition to K Equal Sum Subsets | Medium | Bit Manipulation, Memoization, Array +3 |
| 712 | Minimum ASCII Delete Sum for Two Strings | Medium | String, Dynamic Programming |
| 714 | Best Time to Buy and Sell Stock with Transaction Fee | Medium | Greedy, Array, Dynamic Programming |
| 718 | Maximum Length of Repeated Subarray | Medium | Array, Binary Search, Dynamic Programming +3 |
| 740 | Delete and Earn | Medium | Array, Hash Table, Dynamic Programming |
| 787 | Cheapest Flights Within K Stops | Medium | Depth-First Search, Breadth-First Search, Graph +3 |
| 790 | Domino and Tromino Tiling | Medium | Dynamic Programming |
| 918 | Maximum Sum Circular Subarray | Medium | Queue, Array, Divide and Conquer +2 |
| 1143 | Longest Common Subsequence | Medium | String, Dynamic Programming |
| 1372 | Longest ZigZag Path in a Binary Tree | Medium | Tree, Depth-First Search, Dynamic Programming +1 |
| 1493 | Longest Subarray of 1's After Deleting One Element | Medium | Array, Dynamic Programming, Sliding Window |
| 256 | Paint HousePremium | Medium | Array, Dynamic Programming |
| 276 | Paint FencePremium | Medium | Dynamic Programming |
| 294 | Flip Game IIPremium | Medium | Memoization, Math, Dynamic Programming +2 |
| 333 | Largest BST SubtreePremium | Medium | Tree, Depth-First Search, Binary Search Tree +2 |
| 351 | Android Unlock PatternsPremium | Medium | Bit Manipulation, Dynamic Programming, Backtracking +1 |
| 361 | Bomb EnemyPremium | Medium | Array, Dynamic Programming, Matrix |
| 418 | Sentence Screen FittingPremium | Medium | Array, String, Dynamic Programming |
| 487 | Max Consecutive Ones IIPremium | Medium | Array, Dynamic Programming, Sliding Window |
| 562 | Longest Line of Consecutive One in MatrixPremium | Medium | Array, Dynamic Programming, Matrix |
| 634 | Find the Derangement of An ArrayPremium | Medium | Math, Dynamic Programming, Combinatorics |
| 651 | 4 Keys KeyboardPremium | Medium | Math, Dynamic Programming |
| 750 | Number Of Corner RectanglesPremium | Medium | Array, Math, Dynamic Programming +1 |
| 764 | Largest Plus Sign | Medium | Array, Dynamic Programming |
| 788 | Rotated Digits | Medium | Math, Dynamic Programming |
| 792 | Number of Matching Subsequences | Medium | Trie, Array, Hash Table +4 |
| 799 | Champagne Tower | Medium | Dynamic Programming |
| 808 | Soup Servings | Medium | Math, Dynamic Programming, Probability and Statistics |
| 813 | Largest Sum of Averages | Medium | Array, Dynamic Programming, Prefix Sum |
| 823 | Binary Trees With Factors | Medium | Array, Hash Table, Dynamic Programming +1 |
| 837 | New 21 Game | Medium | Math, Dynamic Programming, Sliding Window +1 |
| 838 | Push Dominoes | Medium | Two Pointers, String, Dynamic Programming |
| 845 | Longest Mountain in Array | Medium | Array, Two Pointers, Dynamic Programming +1 |
| 873 | Length of Longest Fibonacci Subsequence | Medium | Array, Hash Table, Dynamic Programming |
| 877 | Stone Game | Medium | Array, Math, Dynamic Programming +1 |
| 894 | All Possible Full Binary Trees | Medium | Tree, Recursion, Memoization +2 |
| 898 | Bitwise ORs of Subarrays | Medium | Bit Manipulation, Array, Dynamic Programming |
| 907 | Sum of Subarray Minimums | Medium | Stack, Array, Dynamic Programming +1 |
| 926 | Flip String to Monotone Increasing | Medium | String, Dynamic Programming |
| 931 | Minimum Falling Path Sum | Medium | Array, Dynamic Programming, Matrix |
| 935 | Knight Dialer | Medium | Dynamic Programming |
| 978 | Longest Turbulent Subarray | Medium | Array, Dynamic Programming, Sliding Window |
| 983 | Minimum Cost For Tickets | Medium | Array, Dynamic Programming |
| 1014 | Best Sightseeing Pair | Medium | Array, Dynamic Programming |
| 1024 | Video Stitching | Medium | Greedy, Array, Dynamic Programming |
| 1027 | Longest Arithmetic Subsequence | Medium | Array, Hash Table, Binary Search +1 |
| 1031 | Maximum Sum of Two Non-Overlapping Subarrays | Medium | Array, Dynamic Programming, Sliding Window |
| 1035 | Uncrossed Lines | Medium | Array, Dynamic Programming |
| 1039 | Minimum Score Triangulation of Polygon | Medium | Array, Dynamic Programming |
| 1043 | Partition Array for Maximum Sum | Medium | Array, Dynamic Programming |
| 1048 | Longest String Chain | Medium | Array, Hash Table, Two Pointers +3 |
| 1049 | Last Stone Weight II | Medium | Array, Dynamic Programming |
| 1062 | Longest Repeating SubstringPremium | Medium | String, Binary Search, Dynamic Programming +3 |
| 1066 | Campus Bikes IIPremium | Medium | Bit Manipulation, Array, Dynamic Programming +2 |
| 1105 | Filling Bookcase Shelves | Medium | Array, Dynamic Programming |
| 1130 | Minimum Cost Tree From Leaf Values | Medium | Stack, Greedy, Array +2 |
| 1139 | Largest 1-Bordered Square | Medium | Array, Dynamic Programming, Matrix |
| 1140 | Stone Game II | Medium | Array, Math, Dynamic Programming +2 |
| 1155 | Number of Dice Rolls With Target Sum | Medium | Dynamic Programming |
| 1162 | As Far from Land as Possible | Medium | Breadth-First Search, Array, Dynamic Programming +1 |
| 1182 | Shortest Distance to Target ColorPremium | Medium | Array, Binary Search, Dynamic Programming |
| 1186 | Maximum Subarray Sum with One Deletion | Medium | Array, Dynamic Programming |
| 1191 | K-Concatenation Maximum Sum | Medium | Array, Dynamic Programming |
| 1218 | Longest Arithmetic Subsequence of Given Difference | Medium | Array, Hash Table, Dynamic Programming |
| 1227 | Airplane Seat Assignment Probability | Medium | Brainteaser, Math, Dynamic Programming +1 |
| 1230 | Toss Strange CoinsPremium | Medium | Array, Math, Dynamic Programming +1 |
| 1262 | Greatest Sum Divisible by Three | Medium | Greedy, Array, Dynamic Programming +1 |
| 1277 | Count Square Submatrices with All Ones | Medium | Array, Dynamic Programming, Matrix |
| 1334 | Find the City With the Smallest Number of Neighbors at a Threshold Distance | Medium | Graph, Dynamic Programming, Shortest Path |
| 1387 | Sort Integers by The Power Value | Medium | Memoization, Dynamic Programming, Sorting |
| 1395 | Count Number of Teams | Medium | Binary Indexed Tree, Segment Tree, Array +1 |
| 1477 | Find Two Non-overlapping Sub-arrays Each With Target Sum | Medium | Array, Hash Table, Binary Search +2 |
| 1504 | Count Submatrices With All Ones | Medium | Stack, Array, Dynamic Programming +2 |
| 1524 | Number of Sub-arrays With Odd Sum | Medium | Array, Math, Dynamic Programming +1 |
| 1525 | Number of Good Ways to Split a String | Medium | Bit Manipulation, Hash Table, String +1 |
| 1567 | Maximum Length of Subarray With Positive Product | Medium | Greedy, Array, Dynamic Programming |
| 1578 | Minimum Time to Make Rope Colorful | Medium | Greedy, Array, String +1 |
| 1594 | Maximum Non Negative Product in a Matrix | Medium | Array, Dynamic Programming, Matrix |
| 1621 | Number of Sets of K Non-Overlapping Line Segments | Medium | Math, Dynamic Programming, Combinatorics |
| 1626 | Best Team With No Conflicts | Medium | Array, Dynamic Programming, Sorting |
| 1638 | Count Substrings That Differ by One Character | Medium | Hash Table, String, Dynamic Programming +1 |
| 1641 | Count Sorted Vowel Strings | Medium | Math, Dynamic Programming, Combinatorics |
| 1653 | Minimum Deletions to Make String Balanced | Medium | Stack, String, Dynamic Programming |
| 1654 | Minimum Jumps to Reach Home | Medium | Breadth-First Search, Array, Dynamic Programming |
| 1682 | Longest Palindromic Subsequence IIPremium | Medium | String, Dynamic Programming |
| 1690 | Stone Game VII | Medium | Array, Math, Dynamic Programming +1 |
| 1696 | Jump Game VI | Medium | Queue, Array, Dynamic Programming +2 |
| 1746 | Maximum Subarray Sum After One OperationPremium | Medium | Array, Dynamic Programming |
| 1749 | Maximum Absolute Sum of Any Subarray | Medium | Array, Dynamic Programming |
| 1774 | Closest Dessert Cost | Medium | Array, Dynamic Programming, Backtracking |
| 1786 | Number of Restricted Paths From First to Last Node | Medium | Graph, Topological Sort, Dynamic Programming +2 |
| 1824 | Minimum Sideway Jumps | Medium | Greedy, Array, Dynamic Programming |
| 1871 | Jump Game VII | Medium | String, Dynamic Programming, Prefix Sum +1 |
| 1884 | Egg Drop With 2 Eggs and N Floors | Medium | Math, Dynamic Programming |
| 1888 | Minimum Number of Flips to Make the Binary String Alternating | Medium | String, Dynamic Programming, Sliding Window |
| 1908 | Game of NimPremium | Medium | Bit Manipulation, Brainteaser, Array +3 |
| 1911 | Maximum Alternating Subsequence Sum | Medium | Array, Dynamic Programming |
| 1937 | Maximum Number of Points with Cost | Medium | Array, Dynamic Programming, Matrix |
| 1947 | Maximum Compatibility Score Sum | Medium | Bit Manipulation, Array, Dynamic Programming +2 |
| 1959 | Minimum Total Space Wasted With K Resizing Operations | Medium | Array, Dynamic Programming |
| 1976 | Number of Ways to Arrive at Destination | Medium | Graph, Topological Sort, Dynamic Programming +1 |
| 1981 | Minimize the Difference Between Target and Chosen Elements | Medium | Array, Dynamic Programming, Matrix |
| 1986 | Minimum Number of Work Sessions to Finish the Tasks | Medium | Bit Manipulation, Array, Dynamic Programming +2 |
| 1997 | First Day Where You Have Been in All the Rooms | Medium | Array, Dynamic Programming |
| 2002 | Maximum Product of the Length of Two Palindromic Subsequences | Medium | Bit Manipulation, String, Dynamic Programming +2 |
| 2008 | Maximum Earnings From Taxi | Medium | Array, Hash Table, Binary Search +2 |
| 2036 | Maximum Alternating Subarray SumPremium | Medium | Array, Dynamic Programming |
| 2052 | Minimum Cost to Separate Sentence Into RowsPremium | Medium | Array, Dynamic Programming |
| 2054 | Two Best Non-Overlapping Events | Medium | Array, Binary Search, Dynamic Programming +2 |
| 2063 | Vowels of All Substrings | Medium | Math, String, Dynamic Programming +1 |
| 2086 | Minimum Number of Food Buckets to Feed the Hamsters | Medium | Greedy, String, Dynamic Programming |
| 2100 | Find Good Days to Rob the Bank | Medium | Array, Dynamic Programming, Prefix Sum |
| 2110 | Number of Smooth Descent Periods of a Stock | Medium | Array, Math, Two Pointers +2 |
| 2140 | Solving Questions With Brainpower | Medium | Array, Dynamic Programming |
| 2152 | Minimum Number of Lines to Cover PointsPremium | Medium | Bit Manipulation, Geometry, Array +5 |
| 2184 | Number of Ways to Build Sturdy Brick WallPremium | Medium | Bit Manipulation, Array, Dynamic Programming +1 |
| 2189 | Number of Ways to Build House of CardsPremium | Medium | Math, Dynamic Programming |
| 2222 | Number of Ways to Select Buildings | Medium | String, Dynamic Programming, Prefix Sum |
| 2266 | Count Number of Texts | Medium | Hash Table, Math, String +1 |
| 2291 | Maximum Profit From Trading StocksPremium | Medium | Array, Dynamic Programming |
| 2297 | Jump Game VIIIPremium | Medium | Stack, Graph, Array +3 |
| 2304 | Minimum Path Cost in a Grid | Medium | Array, Dynamic Programming, Matrix |
| 2305 | Fair Distribution of Cookies | Medium | Bit Manipulation, Array, Dynamic Programming +2 |
| 2310 | Sum of Numbers With Units Digit K | Medium | Greedy, Math, Dynamic Programming +1 |
| 2311 | Longest Binary Subsequence Less Than or Equal to K | Medium | Greedy, Memoization, String +1 |
| 2320 | Count Number of Ways to Place Houses | Medium | Dynamic Programming |
| 2327 | Number of People Aware of a Secret | Medium | Queue, Dynamic Programming, Simulation |
| 2369 | Check if There is a Valid Partition For The Array | Medium | Array, Dynamic Programming |
| 2370 | Longest Ideal Subsequence | Medium | Hash Table, String, Dynamic Programming |
| 2378 | Choose Edges to Maximize Score in a TreePremium | Medium | Tree, Depth-First Search, Dynamic Programming |
| 2380 | Time Needed to Rearrange a Binary String | Medium | String, Dynamic Programming, Simulation |
| 2393 | Count Strictly Increasing SubarraysPremium | Medium | Array, Math, Dynamic Programming |
| 2400 | Number of Ways to Reach a Position After Exactly k Steps | Medium | Math, Dynamic Programming, Combinatorics |
| 2420 | Find All Good Indices | Medium | Array, Dynamic Programming, Prefix Sum |
| 2431 | Maximize Total Tastiness of Purchased FruitsPremium | Medium | Array, Dynamic Programming |
| 2436 | Minimum Split Into Subarrays With GCD Greater Than OnePremium | Medium | Greedy, Array, Math +2 |
| 2439 | Minimize Maximum of Array | Medium | Greedy, Array, Binary Search +2 |
| 2464 | Minimum Subarrays in a Valid SplitPremium | Medium | Array, Math, Dynamic Programming +1 |
| 2466 | Count Ways To Build Good Strings | Medium | Dynamic Programming |
| 2495 | Number of Subarrays Having Even ProductPremium | Medium | Array, Math, Dynamic Programming |
| 2501 | Longest Square Streak in an Array | Medium | Array, Hash Table, Binary Search +2 |
| 2510 | Check if There is a Path With Equal Number of 0's And 1'sPremium | Medium | Array, Dynamic Programming, Matrix |
| 2522 | Partition String Into Substrings With Values at Most K | Medium | Greedy, String, Dynamic Programming |
| 2533 | Number of Good Binary StringsPremium | Medium | Dynamic Programming |
| 2556 | Disconnect Path in a Binary Matrix by at Most One Flip | Medium | Depth-First Search, Breadth-First Search, Array +2 |
| 2560 | House Robber IV | Medium | Greedy, Array, Binary Search +1 |
| 2571 | Minimum Operations to Reduce an Integer to 0 | Medium | Greedy, Bit Manipulation, Dynamic Programming |
| 2572 | Count the Number of Square-Free Subsets | Medium | Bit Manipulation, Array, Math +2 |
| 2597 | The Number of Beautiful Subsets | Medium | Array, Hash Table, Math +4 |
| 2606 | Find the Substring With Maximum Cost | Medium | Array, Hash Table, String +1 |
| 2616 | Minimize the Maximum Difference of Pairs | Medium | Greedy, Array, Binary Search +2 |
| 2638 | Count the Number of K-Free SubsetsPremium | Medium | Array, Math, Dynamic Programming +2 |
| 2645 | Minimum Additions to Make Valid String | Medium | Stack, Greedy, String +1 |
| 2673 | Make Costs of Paths Equal in a Binary Tree | Medium | Greedy, Tree, Array +2 |
| 2684 | Maximum Number of Moves in a Grid | Medium | Array, Dynamic Programming, Matrix |
| 2707 | Extra Characters in a String | Medium | Trie, Array, Hash Table +2 |
| 2708 | Maximum Strength of a Group | Medium | Greedy, Bit Manipulation, Array +4 |
| 2712 | Minimum Cost to Make All Characters Equal | Medium | Greedy, String, Dynamic Programming |
| 2741 | Special Permutations | Medium | Bit Manipulation, Array, Dynamic Programming +1 |
| 2745 | Construct the Longest New String | Medium | Greedy, Brainteaser, Math +1 |
| 2746 | Decremental String Concatenation | Medium | Array, String, Dynamic Programming |
| 2750 | Ways to Split Array Into Good Subarrays | Medium | Array, Math, Dynamic Programming |
| 2767 | Partition String Into Minimum Beautiful Substrings | Medium | Hash Table, String, Dynamic Programming +1 |
| 2770 | Maximum Number of Jumps to Reach the Last Index | Medium | Array, Dynamic Programming |
| 2771 | Longest Non-decreasing Subarray From Two Arrays | Medium | Array, Dynamic Programming |
| 2786 | Visit Array Positions to Maximize Score | Medium | Array, Dynamic Programming |
| 2787 | Ways to Express an Integer as Sum of Powers | Medium | Dynamic Programming |
| 2811 | Check if it is Possible to Split Array | Medium | Greedy, Array, Dynamic Programming |
| 2826 | Sorting Three Groups | Medium | Array, Binary Search, Dynamic Programming |
| 2830 | Maximize the Profit as the Salesman | Medium | Array, Hash Table, Binary Search +2 |
| 2850 | Minimum Moves to Spread Stones Over Grid | Medium | Breadth-First Search, Array, Dynamic Programming +1 |
| 2892 | Minimizing Array After Replacing Pairs With Their ProductPremium | Medium | Greedy, Array, Dynamic Programming |
| 2896 | Apply Operations to Make Two Strings Equal | Medium | String, Dynamic Programming |
| 2901 | Longest Unequal Adjacent Groups Subsequence II | Medium | Array, String, Dynamic Programming |
| 2915 | Length of the Longest Subsequence That Sums to Target | Medium | Array, Dynamic Programming |
| 2919 | Minimum Increment Operations to Make Array Beautiful | Medium | Array, Dynamic Programming |
| 2925 | Maximum Score After Applying Operations on a Tree | Medium | Tree, Depth-First Search, Dynamic Programming |
| 2930 | Number of Strings Which Can Be Rearranged to Contain Substring | Medium | Math, Dynamic Programming, Combinatorics |
| 2944 | Minimum Number of Coins for Fruits | Medium | Queue, Array, Dynamic Programming +2 |
| 2957 | Remove Adjacent Almost-Equal Characters | Medium | Greedy, String, Dynamic Programming |
| 2979 | Most Expensive Item That Can Not Be BoughtPremium | Medium | Math, Dynamic Programming, Number Theory |
| 2992 | Number of Self-Divisible PermutationsPremium | Medium | Bit Manipulation, Array, Math +4 |
| 2998 | Minimum Number of Operations to Make X and Y Equal | Medium | Breadth-First Search, Memoization, Dynamic Programming |
Hard (226)
| # | Problem | Difficulty | Topics |
|---|---|---|---|
| 10 | Regular Expression Matching | Hard | Recursion, String, Dynamic Programming |
| 32 | Longest Valid Parentheses | Hard | Stack, String, Dynamic Programming |
| 42 | Trapping Rain Water | Hard | Stack, Array, Two Pointers +2 |
| 44 | Wildcard Matching | Hard | Greedy, Recursion, String +1 |
| 85 | Maximal Rectangle | Hard | Stack, Array, Dynamic Programming +2 |
| 87 | Scramble String | Hard | String, Dynamic Programming |
| 115 | Distinct Subsequences | Hard | String, Dynamic Programming |
| 123 | Best Time to Buy and Sell Stock III | Hard | Array, Dynamic Programming |
| 124 | Binary Tree Maximum Path Sum | Hard | Tree, Depth-First Search, Dynamic Programming +1 |
| 132 | Palindrome Partitioning II | Hard | String, Dynamic Programming |
| 140 | Word Break II | Hard | Trie, Memoization, Array +4 |
| 174 | Dungeon Game | Hard | Array, Dynamic Programming, Matrix |
| 188 | Best Time to Buy and Sell Stock IV | Hard | Array, Dynamic Programming |
| 233 | Number of Digit One | Hard | Recursion, Math, Dynamic Programming |
| 312 | Burst Balloons | Hard | Array, Dynamic Programming |
| 329 | Longest Increasing Path in a Matrix | Hard | Depth-First Search, Breadth-First Search, Graph +5 |
| 354 | Russian Doll Envelopes | Hard | Array, Binary Search, Dynamic Programming +1 |
| 403 | Frog Jump | Hard | Array, Dynamic Programming |
| 410 | Split Array Largest Sum | Hard | Greedy, Array, Binary Search +2 |
| 446 | Arithmetic Slices II - Subsequence | Hard | Array, Dynamic Programming |
| 458 | Poor Pigs | Hard | Math, Dynamic Programming, Combinatorics |
| 466 | Count The Repetitions | Hard | String, Dynamic Programming |
| 472 | Concatenated Words | Hard | Depth-First Search, Trie, Array +3 |
| 488 | Zuma Game | Hard | Stack, Breadth-First Search, Memoization +2 |
| 514 | Freedom Trail | Hard | Depth-First Search, Breadth-First Search, String +1 |
| 546 | Remove Boxes | Hard | Memoization, Array, Dynamic Programming |
| 552 | Student Attendance Record II | Hard | Dynamic Programming |
| 600 | Non-negative Integers without Consecutive Ones | Hard | Dynamic Programming |
| 629 | K Inverse Pairs Array | Hard | Dynamic Programming |
| 639 | Decode Ways II | Hard | String, Dynamic Programming |
| 664 | Strange Printer | Hard | String, Dynamic Programming |
| 689 | Maximum Sum of 3 Non-Overlapping Subarrays | Hard | Array, Dynamic Programming, Prefix Sum +1 |
| 691 | Stickers to Spell Word | Hard | Bit Manipulation, Memoization, Array +5 |
| 730 | Count Different Palindromic Subsequences | Hard | String, Dynamic Programming |
| 741 | Cherry Pickup | Hard | Array, Dynamic Programming, Matrix |
| 1235 | Maximum Profit in Job Scheduling | Hard | Array, Binary Search, Dynamic Programming +1 |
| 265 | Paint House IIPremium | Hard | Array, Dynamic Programming |
| 465 | Optimal Account BalancingPremium | Hard | Bit Manipulation, Array, Dynamic Programming +2 |
| 471 | Encode String with Shortest LengthPremium | Hard | String, Dynamic Programming |
| 568 | Maximum Vacation DaysPremium | Hard | Array, Dynamic Programming, Matrix |
| 656 | Coin PathPremium | Hard | Array, Dynamic Programming |
| 727 | Minimum Window SubsequencePremium | Hard | String, Dynamic Programming, Sliding Window |
| 773 | Sliding Puzzle | Hard | Breadth-First Search, Memoization, Array +3 |
| 801 | Minimum Swaps To Make Sequences Increasing | Hard | Array, Dynamic Programming |
| 805 | Split Array With Same Average | Hard | Bit Manipulation, Array, Math +2 |
| 818 | Race Car | Hard | Dynamic Programming |
| 828 | Count Unique Characters of All Substrings of a Given String | Hard | Hash Table, String, Dynamic Programming |
| 834 | Sum of Distances in Tree | Hard | Tree, Depth-First Search, Graph +1 |
| 847 | Shortest Path Visiting All Nodes | Hard | Bit Manipulation, Breadth-First Search, Graph +2 |
| 871 | Minimum Number of Refueling Stops | Hard | Greedy, Array, Dynamic Programming +1 |
| 879 | Profitable Schemes | Hard | Array, Dynamic Programming |
| 887 | Super Egg Drop | Hard | Math, Binary Search, Dynamic Programming |
| 902 | Numbers At Most N Given Digit Set | Hard | Array, Math, String +2 |
| 903 | Valid Permutations for DI Sequence | Hard | String, Dynamic Programming, Prefix Sum |
| 913 | Cat and Mouse | Hard | Graph, Topological Sort, Memoization +3 |
| 920 | Number of Music Playlists | Hard | Math, Dynamic Programming, Combinatorics |
| 940 | Distinct Subsequences II | Hard | String, Dynamic Programming |
| 943 | Find the Shortest Superstring | Hard | Bit Manipulation, Array, String +2 |
| 956 | Tallest Billboard | Hard | Array, Dynamic Programming |
| 960 | Delete Columns to Make Sorted III | Hard | Array, String, Dynamic Programming |
| 964 | Least Operators to Express Number | Hard | Memoization, Math, Dynamic Programming |
| 968 | Binary Tree Cameras | Hard | Tree, Depth-First Search, Dynamic Programming +1 |
| 975 | Odd Even Jump | Hard | Stack, Array, Dynamic Programming +3 |
| 996 | Number of Squareful Arrays | Hard | Bit Manipulation, Array, Hash Table +4 |
| 1000 | Minimum Cost to Merge Stones | Hard | Array, Dynamic Programming, Prefix Sum |
| 1012 | Numbers With Repeated Digits | Hard | Math, Dynamic Programming |
| 1067 | Digit Count in RangePremium | Hard | Math, Dynamic Programming |
| 1092 | Shortest Common Supersequence | Hard | String, Dynamic Programming |
| 1125 | Smallest Sufficient Team | Hard | Bit Manipulation, Array, Dynamic Programming +1 |
| 1147 | Longest Chunked Palindrome Decomposition | Hard | Greedy, Two Pointers, String +3 |
| 1187 | Make Array Strictly Increasing | Hard | Array, Binary Search, Dynamic Programming +1 |
| 1216 | Valid Palindrome IIIPremium | Hard | String, Dynamic Programming |
| 1220 | Count Vowels Permutation | Hard | Dynamic Programming |
| 1223 | Dice Roll Simulation | Hard | Array, Dynamic Programming |
| 1246 | Palindrome RemovalPremium | Hard | Array, Dynamic Programming |
| 1255 | Maximum Score Words Formed by Letters | Hard | Bit Manipulation, Array, Hash Table +5 |
| 1259 | Handshakes That Don't CrossPremium | Hard | Math, Dynamic Programming |
| 1269 | Number of Ways to Stay in the Same Place After Some Steps | Hard | Dynamic Programming |
| 1278 | Palindrome Partitioning III | Hard | String, Dynamic Programming |
| 1289 | Minimum Falling Path Sum II | Hard | Array, Dynamic Programming, Matrix |
| 1301 | Number of Paths with Max Score | Hard | Array, Dynamic Programming, Matrix |
| 1312 | Minimum Insertion Steps to Make a String Palindrome | Hard | String, Dynamic Programming |
| 1320 | Minimum Distance to Type a Word Using Two Fingers | Hard | String, Dynamic Programming |
| 1326 | Minimum Number of Taps to Open to Water a Garden | Hard | Greedy, Array, Dynamic Programming |
| 1335 | Minimum Difficulty of a Job Schedule | Hard | Array, Dynamic Programming |
| 1340 | Jump Game V | Hard | Array, Dynamic Programming, Sorting |
| 1349 | Maximum Students Taking Exam | Hard | Bit Manipulation, Array, Dynamic Programming +2 |
| 1359 | Count All Valid Pickup and Delivery Options | Hard | Math, Dynamic Programming, Combinatorics |
| 1363 | Largest Multiple of Three | Hard | Greedy, Array, Math +2 |
| 1373 | Maximum Sum BST in Binary Tree | Hard | Tree, Depth-First Search, Binary Search Tree +2 |
| 1388 | Pizza With 3n Slices | Hard | Greedy, Array, Dynamic Programming +1 |
| 1397 | Find All Good Strings | Hard | String, Dynamic Programming, String Matching |
| 1402 | Reducing Dishes | Hard | Greedy, Array, Dynamic Programming +1 |
| 1406 | Stone Game III | Hard | Array, Math, Dynamic Programming +1 |
| 1411 | Number of Ways to Paint N × 3 Grid | Hard | Dynamic Programming |
| 1416 | Restore The Array | Hard | String, Dynamic Programming |
| 1420 | Build Array Where You Can Find The Maximum Exactly K Comparisons | Hard | Dynamic Programming, Prefix Sum |
| 1425 | Constrained Subsequence Sum | Hard | Queue, Array, Dynamic Programming +3 |
| 1434 | Number of Ways to Wear Different Hats to Each Other | Hard | Bit Manipulation, Array, Dynamic Programming +1 |
| 1444 | Number of Ways of Cutting a Pizza | Hard | Memoization, Array, Dynamic Programming +2 |
| 1449 | Form Largest Integer With Digits That Add up to Target | Hard | Array, Dynamic Programming |
| 1458 | Max Dot Product of Two Subsequences | Hard | Array, Dynamic Programming |
| 1463 | Cherry Pickup II | Hard | Array, Dynamic Programming, Matrix |
| 1467 | Probability of a Two Boxes Having The Same Number of Distinct Balls | Hard | Array, Math, Dynamic Programming +3 |
| 1473 | Paint House III | Hard | Array, Dynamic Programming |
| 1478 | Allocate Mailboxes | Hard | Array, Math, Dynamic Programming +1 |
| 1483 | Kth Ancestor of a Tree Node | Hard | Bit Manipulation, Tree, Depth-First Search +4 |
| 1494 | Parallel Courses II | Hard | Bit Manipulation, Graph, Dynamic Programming +1 |
| 1510 | Stone Game IV | Hard | Math, Dynamic Programming, Game Theory |
| 1526 | Minimum Number of Increments on Subarrays to Form a Target Array | Hard | Stack, Greedy, Array +2 |
| 1531 | String Compression II | Hard | String, Dynamic Programming |
| 1537 | Get the Maximum Score | Hard | Greedy, Array, Two Pointers +1 |
| 1547 | Minimum Cost to Cut a Stick | Hard | Array, Dynamic Programming, Sorting |
| 1548 | The Most Similar Path in a GraphPremium | Hard | Graph, Dynamic Programming |
| 1553 | Minimum Number of Days to Eat N Oranges | Hard | Memoization, Dynamic Programming |
| 1563 | Stone Game V | Hard | Array, Math, Dynamic Programming +1 |
| 1569 | Number of Ways to Reorder Array to Get Same BST | Hard | Tree, Union Find, Binary Search Tree +7 |
| 1575 | Count All Possible Routes | Hard | Memoization, Array, Dynamic Programming |
| 1595 | Minimum Cost to Connect Two Groups of Points | Hard | Bit Manipulation, Array, Dynamic Programming +2 |
| 1611 | Minimum One Bit Operations to Make Integers Zero | Hard | Bit Manipulation, Memoization, Dynamic Programming |
| 1617 | Count Subtrees With Max Distance Between Cities | Hard | Bit Manipulation, Tree, Dynamic Programming +2 |
| 1639 | Number of Ways to Form a Target String Given a Dictionary | Hard | Array, String, Dynamic Programming |
| 1643 | Kth Smallest Instructions | Hard | Array, Math, Dynamic Programming +1 |
| 1655 | Distribute Repeating Integers | Hard | Bit Manipulation, Array, Dynamic Programming +2 |
| 1659 | Maximize Grid Happiness | Hard | Bit Manipulation, Memoization, Dynamic Programming +1 |
| 1671 | Minimum Number of Removals to Make Mountain Array | Hard | Greedy, Array, Binary Search +1 |
| 1681 | Minimum Incompatibility | Hard | Bit Manipulation, Array, Dynamic Programming +1 |
| 1687 | Delivering Boxes from Storage to Ports | Hard | Segment Tree, Queue, Array +4 |
| 1691 | Maximum Height by Stacking Cuboids | Hard | Array, Dynamic Programming, Sorting |
| 1692 | Count Ways to Distribute CandiesPremium | Hard | Dynamic Programming |
| 1714 | Sum Of Special Evenly-Spaced Elements In ArrayPremium | Hard | Array, Dynamic Programming |
| 1723 | Find Minimum Time to Finish All Jobs | Hard | Bit Manipulation, Array, Dynamic Programming +2 |
| 1728 | Cat and Mouse II | Hard | Graph, Topological Sort, Memoization +5 |
| 1735 | Count Ways to Make Array With Product | Hard | Array, Math, Dynamic Programming +2 |
| 1745 | Palindrome Partitioning IV | Hard | String, Dynamic Programming |
| 1751 | Maximum Number of Events That Can Be Attended II | Hard | Array, Binary Search, Dynamic Programming +1 |
| 1755 | Closest Subsequence Sum | Hard | Bit Manipulation, Array, Two Pointers +3 |
| 1770 | Maximum Score from Performing Multiplication Operations | Hard | Array, Dynamic Programming |
| 1771 | Maximize Palindrome Length From Subsequences | Hard | String, Dynamic Programming |
| 1787 | Make the XOR of All Segments Equal to Zero | Hard | Bit Manipulation, Array, Dynamic Programming |
| 1799 | Maximize Score After N Operations | Hard | Bit Manipulation, Array, Math +4 |
| 1815 | Maximum Number of Groups Getting Fresh Donuts | Hard | Bit Manipulation, Memoization, Array +2 |
| 1857 | Largest Color Value in a Directed Graph | Hard | Graph, Topological Sort, Memoization +3 |
| 1866 | Number of Ways to Rearrange Sticks With K Sticks Visible | Hard | Math, Dynamic Programming, Combinatorics |
| 1872 | Stone Game VIII | Hard | Array, Math, Dynamic Programming +2 |
| 1879 | Minimum XOR Sum of Two Arrays | Hard | Bit Manipulation, Array, Dynamic Programming +1 |
| 1883 | Minimum Skips to Arrive at Meeting On Time | Hard | Array, Dynamic Programming |
| 1896 | Minimum Cost to Change the Final Value of Expression | Hard | Stack, Math, String +1 |
| 1900 | The Earliest and Latest Rounds Where Players Compete | Hard | Memoization, Dynamic Programming |
| 1916 | Count Ways to Build Rooms in an Ant Colony | Hard | Tree, Graph, Topological Sort +3 |
| 1928 | Minimum Cost to Reach Destination in Time | Hard | Graph, Array, Dynamic Programming |
| 1931 | Painting a Grid With Three Different Colors | Hard | Dynamic Programming |
| 1955 | Count Number of Special Subsequences | Hard | Array, Dynamic Programming |
| 1977 | Number of Ways to Separate Numbers | Hard | String, Dynamic Programming, Suffix Array |
| 1987 | Number of Unique Good Subsequences | Hard | String, Dynamic Programming |
| 1994 | The Number of Good Subsets | Hard | Bit Manipulation, Array, Hash Table +5 |
| 2003 | Smallest Missing Genetic Value in Each Subtree | Hard | Tree, Depth-First Search, Union Find +1 |
| 2005 | Subtree Removal Game with Fibonacci TreePremium | Hard | Tree, Math, Dynamic Programming +2 |
| 2019 | The Score of Students Solving Math Expression | Hard | Stack, Memoization, Array +4 |
| 2035 | Partition Array Into Two Arrays to Minimize Sum Difference | Hard | Bit Manipulation, Array, Two Pointers +4 |
| 2050 | Parallel Courses III | Hard | Graph, Topological Sort, Array +1 |
| 2060 | Check if an Original String Exists Given Two Encoded Strings | Hard | String, Dynamic Programming |
| 2088 | Count Fertile Pyramids in a Land | Hard | Array, Dynamic Programming, Matrix |
| 2143 | Choose Numbers From Two Arrays in RangePremium | Hard | Array, Dynamic Programming |
| 2147 | Number of Ways to Divide a Long Corridor | Hard | Math, String, Dynamic Programming |
| 2163 | Minimum Difference in Sums After Removal of Elements | Hard | Array, Dynamic Programming, Heap (Priority Queue) |
| 2167 | Minimum Time to Remove All Cars Containing Illegal Goods | Hard | String, Dynamic Programming |
| 2172 | Maximum AND Sum of Array | Hard | Bit Manipulation, Array, Dynamic Programming +1 |
| 2188 | Minimum Time to Finish the Race | Hard | Array, Dynamic Programming |
| 2209 | Minimum White Tiles After Covering With Carpets | Hard | String, Dynamic Programming, Prefix Sum |
| 2218 | Maximum Value of K Coins From Piles | Hard | Array, Dynamic Programming, Prefix Sum |
| 2247 | Maximum Cost of Trip With K HighwaysPremium | Hard | Bit Manipulation, Graph, Dynamic Programming +1 |
| 2262 | Total Appeal of A String | Hard | Hash Table, String, Dynamic Programming |
| 2263 | Make Array Non-decreasing or Non-increasingPremium | Hard | Greedy, Dynamic Programming |
| 2267 | Check if There Is a Valid Parentheses String Path | Hard | Array, Dynamic Programming, Matrix |
| 2272 | Substring With Largest Variance | Hard | Array, Dynamic Programming |
| 2312 | Selling Pieces of Wood | Hard | Memoization, Array, Dynamic Programming |
| 2313 | Minimum Flips in Binary Tree to Get ResultPremium | Hard | Tree, Depth-First Search, Dynamic Programming +1 |
| 2318 | Number of Distinct Roll Sequences | Hard | Memoization, Dynamic Programming |
| 2321 | Maximum Score Of Spliced Array | Hard | Array, Dynamic Programming |
| 2328 | Number of Increasing Paths in a Grid | Hard | Depth-First Search, Breadth-First Search, Graph +5 |
| 2338 | Count the Number of Ideal Arrays | Hard | Math, Dynamic Programming, Combinatorics +1 |
| 2355 | Maximum Number of Books You Can TakePremium | Hard | Stack, Array, Dynamic Programming +1 |
| 2361 | Minimum Costs Using the Train LinePremium | Hard | Array, Dynamic Programming |
| 2376 | Count Special Integers | Hard | Math, Dynamic Programming |
| 2403 | Minimum Time to Kill All MonstersPremium | Hard | Bit Manipulation, Array, Dynamic Programming +1 |
| 2407 | Longest Increasing Subsequence II | Hard | Binary Indexed Tree, Segment Tree, Queue +4 |
| 2430 | Maximum Deletions on a String | Hard | String, Dynamic Programming, String Matching +2 |
| 2435 | Paths in Matrix Whose Sum Is Divisible by K | Hard | Array, Dynamic Programming, Matrix |
| 2463 | Minimum Total Distance Traveled | Hard | Array, Dynamic Programming, Sorting |
| 2472 | Maximum Number of Non-overlapping Palindrome Substrings | Hard | Greedy, Two Pointers, String +1 |
| 2478 | Number of Beautiful Partitions | Hard | String, Dynamic Programming, Prefix Sum |
| 2484 | Count Palindromic Subsequences | Hard | String, Dynamic Programming |
| 2518 | Number of Great Partitions | Hard | Array, Dynamic Programming |
| 2538 | Difference Between Maximum and Minimum Price Sum | Hard | Tree, Depth-First Search, Array +1 |
| 2547 | Minimum Cost to Split an Array | Hard | Array, Hash Table, Dynamic Programming +1 |
| 2552 | Count Increasing Quadruplets | Hard | Binary Indexed Tree, Array, Dynamic Programming +2 |
| 2573 | Find the String with LCP | Hard | Greedy, Union Find, Array +3 |
| 2581 | Count Number of Possible Root Nodes | Hard | Tree, Depth-First Search, Array +2 |
| 2585 | Number of Ways to Earn Points | Hard | Array, Dynamic Programming |
| 2617 | Minimum Number of Visited Cells in a Grid | Hard | Stack, Breadth-First Search, Union Find +5 |
| 2646 | Minimize the Total Price of the Trips | Hard | Tree, Depth-First Search, Graph +2 |
| 2681 | Power of Heroes | Hard | Array, Math, Dynamic Programming +2 |
| 2713 | Maximum Strictly Increasing Cells in a Matrix | Hard | Memoization, Array, Hash Table +5 |
| 2719 | Count of Integers | Hard | Math, String, Dynamic Programming |
| 2742 | Painting the Walls | Hard | Array, Dynamic Programming |
| 2791 | Count Paths That Can Form a Palindrome in a Tree | Hard | Bit Manipulation, Tree, Depth-First Search +2 |
| 2801 | Count Stepping Numbers in Range | Hard | String, Dynamic Programming |
| 2809 | Minimum Time to Make Array Sum At Most x | Hard | Array, Dynamic Programming, Sorting |
| 2827 | Number of Beautiful Integers in the Range | Hard | Math, Dynamic Programming |
| 2836 | Maximize Value of Function in a Ball Passing Game | Hard | Bit Manipulation, Array, Dynamic Programming |
| 2851 | String Transformation | Hard | Math, String, Dynamic Programming +1 |
| 2858 | Minimum Edge Reversals So Every Node Is Reachable | Hard | Depth-First Search, Breadth-First Search, Graph +1 |
| 2867 | Count Valid Paths in a Tree | Hard | Tree, Depth-First Search, Math +2 |
| 2876 | Count Visited Nodes in a Directed Graph | Hard | Graph, Memoization, Dynamic Programming |
| 2902 | Count of Sub-Multisets With Bounded Sum | Hard | Array, Hash Table, Dynamic Programming +1 |
| 2911 | Minimum Changes to Make K Semi-palindromes | Hard | Two Pointers, String, Dynamic Programming |
| 2912 | Number of Ways to Reach Destination in the GridPremium | Hard | Math, Dynamic Programming, Combinatorics |
| 2916 | Subarrays Distinct Element Sum of Squares II | Hard | Binary Indexed Tree, Segment Tree, Array +1 |
| 2920 | Maximum Points After Collecting Coins From All Nodes | Hard | Bit Manipulation, Tree, Depth-First Search +3 |
| 2926 | Maximum Balanced Subsequence Sum | Hard | Binary Indexed Tree, Segment Tree, Array +2 |
| 2945 | Find Maximum Non-decreasing Array Length | Hard | Stack, Queue, Array +4 |
| 2969 | Minimum Number of Coins for Fruits IIPremium | Hard | Queue, Array, Dynamic Programming +2 |
| 2973 | Find Number of Coins to Place in Tree Nodes | Hard | Tree, Depth-First Search, Dynamic Programming +2 |
| 2977 | Minimum Cost to Convert String II | Hard | Graph, Trie, Array +3 |
| 2999 | Count the Number of Powerful Integers | Hard | Math, String, Dynamic Programming |
Related patterns
Problems sit in more than one pattern more often than not, and the overlap is where the interesting follow-up questions live.
Dynamic Programming pattern FAQ
What is the dynamic programming pattern?
Dynamic programming applies when a problem has optimal substructure — the best answer is built from the best answers to smaller versions — and overlapping subproblems, meaning the naive recursion asks the same question many times.
How many LeetCode problems use the dynamic programming pattern?
This page lists 481 LeetCode problems that the dynamic programming pattern applies to: 12 Easy, 243 Medium and 226 Hard. 416 of them carry a complete Python solution with complexity analysis.
What is the time complexity of the dynamic programming pattern?
O(states × transitions) time and O(states), frequently reducible space. The running time is the number of distinct states multiplied by the work done at each one, which is why choosing the state is the whole problem: a one-dimensional state over a prefix gives O(n), a two-dimensional state over two strings gives O(n·m), and a bitmask state over n items gives O(2ⁿ·n). Memoised recursion and a bottom-up table share the same complexity and differ only in constant factors and stack depth. The space often collapses — when row i depends only on row i−1, an O(n·m) table becomes O(m).
When should I use the dynamic programming pattern in an interview?
The problem asks for a count, a maximum, a minimum, or whether something is possible — not for the arrangement itself. A greedy choice is provably wrong because a locally worse choice can lead to a better total.
Which dynamic programming problem should I start with?
LeetCode 70. Climbing Stairs is the lowest-numbered Easy problem on this page, which makes it the usual starting point: the technique is visible without the problem's own complications getting in the way.
What patterns are related to dynamic programming?
Backtracking, Greedy, Prefix Sum, Bit Manipulation. Problems frequently sit in more than one of these, and the overlap is where the interesting follow-up questions come from.
More ways in: all 22 patterns, the curated study lists, or the full problem list.
Meet the dynamic programming problem you did not practise
Stealth Interview is a desktop app for macOS and Windows. It reads the coding problem off your screen, returns a working solution with a step-by-step explanation and its time and space complexity, and transcribes what the interviewer is saying — while staying invisible to screen sharing.