698. Partition to K Equal Sum Subsets
Given an array of integers nums and a positive integer k, find whether it's possible to divide this array into k non-empty subsets whose sums are all equal.
def canPartitionKSubsets(self, nums: List[int], k: int) -> bool:
target = sum(nums) // k
nums.sort(reverse=True)
if sum(nums) % k > 0:
return False
if nums[0] > target:
return False
groupsum = [0] * k
found = False
def backtrack(idx):
nonlocal found
if found:
return
for i in range(k):
if found:
return
if nums[idx] + groupsum[i] <= target:
groupsum[i] += nums[idx]
if idx == len(nums) - 1:
found = True
return
backtrack(idx + 1)
groupsum[i] -= nums[idx]
if groupsum[i] == 0:
break
backtrack(0)
return found