DeepRest

Partition Equal Subset Sum

Dec 12th, 2021 (edited)
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.62 KB | None | 0 0
  1.  #Approach 1: Keeping Track of all sums possible so far
  2. class Solution:
  3.     def canPartition(self, nums: List[int]) -> bool:
  4.         tot = sum(nums)
  5.         if tot&1 == 1:
  6.             return False
  7.         tar = tot//2
  8.        
  9.         sums = set([0]) #use set to prevent duplicate sums
  10.         for i in nums:
  11.             for j in sums.copy():
  12.                 if i+j == tar:
  13.                      return True
  14.                 if i+j < tar:
  15.                     sums.add(i+j)
  16.    
  17.         return False
  18.  
  19. #Approach 2: 2-D dp
  20. '''
  21. class Solution(object):
  22.    def canPartition(self, nums):
  23.        """
  24.        :type nums: List[int]
  25.        :rtype: bool
  26.        """
  27.        tot = sum(nums)
  28.        
  29.        if tot&1 == 1:
  30.            return False
  31.        
  32.        tar = tot//2
  33.        dp = [[True]+[False]*(tar)]
  34.  
  35.        for i in nums:
  36.            dp.append(dp[-1][:])
  37.            for j in range(i, tar+1):
  38.                dp[-1][j] = dp[-1][j] or dp[-2][j-i]
  39.            if dp[-1][-1] == True:
  40.                return True
  41.        
  42.        return False
  43. '''
  44.  
  45. #Approach 3: optmized space dp
  46. '''
  47. class Solution(object):
  48.    def canPartition(self, nums):
  49.        """
  50.        :type nums: List[int]
  51.        :rtype: bool
  52.        """
  53.        tot = sum(nums)
  54.        
  55.        if tot&1 == 1:
  56.            return False
  57.        
  58.        tar = tot//2
  59.        dp = [True]+[False]*(tar)
  60.  
  61.        for i in nums:
  62.            dp_prev = dp[:]
  63.            for j in range(i, tar+1):
  64.                dp[j] = dp_prev[j] or dp_prev[j-i]
  65.            if dp[-1] == True:
  66.                return True
  67.        
  68.        return False
  69. '''
Advertisement
Add Comment
Please, Sign In to add comment