Back to the 100
Problem 089Dynamic Programming
Medium

Partition Equal Subset Sum

089

Return true if nums can be split into two subsets with equal sum.

EXAMPLES

Example 1
Input
{
  "nums": [
    1,
    5,
    11,
    5
  ]
}

Output
true

FUNCTION SHAPE

nums: intArraybool
SOLUTION NOTE

If total is odd, impossible. Otherwise, find if any subset sums to total/2. Use take-or-don't-take pattern for each element.

Reveal reference solution +
pythonREFERENCE
def canPartition(self, nums: List[int]) -> bool:
    total = sum(nums)
    if total % 2 != 0: return False
    target = total // 2

    @cache
    def dp(i, remaining):
        if remaining == 0: return True
        if i >= len(nums) or remaining < 0: return False
        return dp(i+1, remaining - nums[i]) or dp(i+1, remaining)

    return dp(0, target)
TimeO(n × sum)
SpaceO(n × sum)
Open on LeetCode
00:00
3 local tests readyRun with ⌘/Ctrl + Enter. Your code stays in this browser.

Runs solve(...) locally in a browser worker. SWE Playbook does not submit your code. Only run code you trust; Python code may access the network.