Skip to content

698. Partition To K Equal Sum Subsets

Array Dynamic Programming Backtracking Bit Manipulation Memoization Bitmask

Problem - Partition To K Equal Sum Subsets

Medium

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 is 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].

Solutions

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution:
    def canPartitionKSubsets(self, nums: List[int], k: int) -> bool:
        s, mod = divmod(sum(nums), k)
        if mod:
            return False

        nums.sort()
        mask = (1 << len(nums)) - 1

        @cache
        def dfs(state, temp):
            if state == mask:
                return True
            for i, num in enumerate(nums):
                if (state >> i) & 1:
                    continue
                if temp + num > s:
                    break
                if dfs(state | 1 << i, (temp + num) % s):
                    return True
            return False

        return dfs(0, 0)

Submission Stats:

  • Runtime: 390 ms (28.03%)
  • Memory: 49.6 MB (5.07%)