partition-to-k-equal-sum-subsets¶
Try it on leetcode
Description¶
Given an integer array nums
and an integer k
, return true
if it is possible to divide this array into k
non-empty subsets whose sums are all equal.
Example 1:
Input: nums = [4,3,2,3,5,2,1], k = 4 Output: true Explanation: It's possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.
Example 2:
Input: nums = [1,2,3,4], k = 3 Output: false
Constraints:
1 <= k <= nums.length <= 16
1 <= nums[i] <= 104
- The frequency of each element is in the range
[1, 4]
.
Solution(Python)¶
class Solution(object):
def canPartitionKSubsets(self, nums, k):
nums.sort()
target, rem = divmod(sum(nums), k)
if rem or nums[-1] > target:
return False
dp = [False] * (1 << len(nums))
dp[0] = True
total = [0] * (1 << len(nums))
for state in range(1 << len(nums)):
if not dp[state]:
continue
for i, num in enumerate(nums):
future = state | (1 << i)
if state != future and not dp[future]:
if num <= target - (total[state] % target):
dp[future] = True
total[future] = total[state] + num
else:
break
return dp[-1]