1988coder

698. Partition to K Equal Sum Subsets

Jan 3rd, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.65 KB | None | 0 0
  1. /**
  2.  * Backtracking Solution
  3.  *
  4.  * Refer: 1)
  5.  * https://leetcode.com/problems/partition-to-k-equal-sum-subsets/discuss/108730/JavaC++Straightforward-dfs-solution
  6.  * 2)
  7.  * https://leetcode.com/problems/partition-to-k-equal-sum-subsets/discuss/108730/JavaC++Straightforward-dfs-solution/140989
  8.  *
  9.  * Time Complexity: O(N * 2^N)
  10.  *
  11.  * Space Complexity: O(N)
  12.  *
  13.  * N = Length of the input nums array.
  14.  */
  15. class Solution {
  16.     public boolean canPartitionKSubsets(int[] nums, int k) {
  17.         if (nums == null || k <= 0 || nums.length < k) {
  18.             return false;
  19.         }
  20.         if (k == 1) {
  21.             return true;
  22.         }
  23.  
  24.         int sum = 0;
  25.         for (int num : nums) {
  26.             sum += num;
  27.         }
  28.         if (sum % k != 0) {
  29.             return false;
  30.         }
  31.         sum /= k;
  32.         boolean[] visited = new boolean[nums.length];
  33.  
  34.         return canPartition(nums, visited, 0, k, 0, sum);
  35.     }
  36.  
  37.     private boolean canPartition(int[] nums, boolean[] visited, int start, int k, int curSum, int targetSum) {
  38.         if (k == 1) {
  39.             return true;
  40.         }
  41.         if (curSum > targetSum) {
  42.             return false;
  43.         }
  44.         if (curSum == targetSum) {
  45.             return canPartition(nums, visited, 0, k - 1, 0, targetSum);
  46.         }
  47.  
  48.         for (int i = start; i < nums.length; i++) {
  49.             if (visited[i]) {
  50.                 continue;
  51.             }
  52.             visited[i] = true;
  53.             if (canPartition(nums, visited, i + 1, k, curSum + nums[i], targetSum)) {
  54.                 return true;
  55.             }
  56.             visited[i] = false;
  57.         }
  58.         return false;
  59.     }
  60. }
Add Comment
Please, Sign In to add comment