Advertisement
kosievdmerwe

Untitled

Sep 30th, 2021
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.85 KB | None | 0 0
  1. class Solution:
  2.     def canPartitionKSubsets(self, nums: List[int], k: int) -> bool:
  3.         S = sum(nums)
  4.         if S % k != 0:
  5.             return False
  6.        
  7.         target = S // k
  8.         nums.sort(reverse=True)
  9.         if nums[0] > target:
  10.             return False
  11.        
  12.         values = [0] * k
  13.         def recurse(cur_idx: int, num_subsets: int) -> bool:
  14.             if cur_idx == len(nums):
  15.                 return True
  16.    
  17.             cur = nums[cur_idx]
  18.             for i in range(min(k, num_subsets + 1)):
  19.                 if values[i] + cur <= target:
  20.                     values[i] += cur
  21.                     if recurse(cur_idx + 1, max(num_subsets, i + 1)):
  22.                         return True
  23.                     values[i] -= cur
  24.             return False
  25.            
  26.         values[0] = nums[0]
  27.         return recurse(1, 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement