← switch

416. Partition Equal Subset Sum

medium

Array · Dynamic Programming · Knapsack Problem · 0-1 Knapsack

read the problem on leetcode →

first solved 18 Jun 2023

python
class Solution(object):
    def canPartition(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """

        if sum(nums)%2==1:
            return False
        
        target=sum(nums)//2
        dp=set()

        if target in nums:
            return True
        
        dp.add(0)
        for i in range(len(nums)-1,-1,-1):
            newDP=set()
            for t in dp:
                if (t+nums[i]==target):
                    return True
                newDP.add(t+nums[i])
                newDP.add(t)
            dp=newDP
        if target in dp:
            return True
        else:
            return False