698. Partition to K Equal Sum Subsets

https://leetcode.com/problems/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.

 

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.

 

Note:

  • 1 <= k <= len(nums) <= 16.
  • 0 < nums[i] < 10000.
---


---
Intuition

If the sum of all elements in array % k != 0
    return false

DFS on all combinations, and keep track of sums
    Terminate on last index .. reached here only if all sums are valid
         return true

    for (i = 0... k)
        if (sums[i] + nums[index] <= target)
            sums[i] += nums[index]
            if (dfs(nums, sums, index + 1, target))
                return true
            sums[i] -= nums[index]

    return false

This tries all combinations
Can optimize
Sort the array descending first

It exits early if any sum > target
---
Time - O(K ^ N)
Space - O(N)
---
Related problems
---