Skip to content

Can Parition

# https://www.youtube.com/watch?v=_i4Yxeh5ceQ&t=3s


class Solution:
    def canPartition(self, nums: List[int]) -> bool:
        if sum(nums) % 2:
            return False  # can't split if odd
        dp = set()
        dp.add(0)  # defai;t
        target = sum(nums) // 2
        for i in range(len(nums) - 1, -1, -1):
            nextDP = set()
            for t in dp:
                nextDP.add(t + nums[i])
                nextDP.add(t)
            dp = nextDP
        return True if target in dp else False