698. Partition to K Equal Sum Subsets
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]
.
class Solution { public boolean canPartitionKSubsets(int[] nums, int k) { if(nums.length < k) return false; int sum = 0; for(int i : nums) sum += i; if(sum % k != 0) return false; boolean[] visited = new boolean[nums.length]; return dfs(visited, nums, 0, 0, sum / k, k); } public boolean dfs(boolean[] visited, int[] nums, int start, int cur, int target, int k) { if(k == 0) return true; if(cur == target) return dfs(visited, nums, 0, 0, target, k - 1); for(int i = start; i < nums.length; i++) { if(visited[i] || cur + nums[i] > target) continue; visited[i] = true; if(dfs(visited, nums, i + 1, cur + nums[i], target, k)) return true; visited[i] = false; } return false; } }