Dynamic Programming LeetCode Problems: All 481, With Python Solutions
Every problem in this library that LeetCode tags Dynamic Programming — 481 in total, 416 of them with a complete Python solution, a worked example and the time and space complexity of the approach.
- 481 problems
- 12 Easy
- 243 Medium
- 226 Hard
How Dynamic Programming problems are solved
A tag names the subject, not the method. These pattern hubs cover the techniques that actually solve Dynamic Programming problems — each one explains the approach, gives a Python template and states its complexity.
- Dynamic Programming — Define a state, write the transition, and stop recomputing the same subproblem.
Dynamic Programming problems by difficulty
Showing the first 200 of 481 problems. Problems with a complete Python solution are listed first, then by ascending problem number.
Easy (10)
| # | 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 |
| 1025 | Divisor Game | Easy | Brainteaser, Math, Dynamic Programming +1 |
| 1137 | N-th Tribonacci Number | Easy | Memoization, Math, Dynamic Programming |
Medium (111)
| # | 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 |
| 764 | Largest Plus Sign | Medium | Array, Dynamic Programming |
| 787 | Cheapest Flights Within K Stops | Medium | Depth-First Search, Breadth-First Search, Graph +3 |
| 788 | Rotated Digits | Medium | Math, Dynamic Programming |
| 790 | Domino and Tromino Tiling | Medium | 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 |
| 918 | Maximum Sum Circular Subarray | Medium | Queue, Array, Divide and Conquer +2 |
| 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 |
| 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 |
| 1143 | Longest Common Subsequence | Medium | String, Dynamic Programming |
| 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 |
| 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 |
| 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 |
Hard (79)
| # | 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 |
| 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 |
| 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 |
| 1220 | Count Vowels Permutation | Hard | Dynamic Programming |
| 1223 | Dice Roll Simulation | Hard | Array, Dynamic Programming |
| 1235 | Maximum Profit in Job Scheduling | Hard | Array, Binary Search, Dynamic Programming +1 |
| 1255 | Maximum Score Words Formed by Letters | Hard | Bit Manipulation, Array, Hash Table +5 |
| 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 |
Keep exploring
- Array1,569
- String672
- Hash Table588
- Math485
- Sorting392
- Greedy346
- Depth-First Search289
- Binary Search253
- Database249
- Tree225
- Breadth-First Search223
- Matrix216
- Two Pointers201
- Bit Manipulation194
- Binary Tree174
- Heap (Priority Queue)163
- Prefix Sum157
- Stack157
- Simulation144
- Graph138
- Counting126
- Design122
- Sliding Window116
- Backtracking105
When the Dynamic Programming problem arrives live
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.