leetcode 698. Partition to K Equal Sum Subsets | 698. 划分为k个相等的子集(回溯法)

x33g5p2x  于2021-11-12 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(267)

题目

https://leetcode.com/problems/partition-to-k-equal-sum-subsets/

题解

一上来以为是 dp(想到了左神讲的,将一个数组分成两个尽可能相等的部分那道题),再一想,原来是 backtracing。

  1. class Solution {
  2. public boolean canPartitionKSubsets(int[] nums, int k) {
  3. int sum = 0;
  4. for (int n : nums) {
  5. sum += n;
  6. }
  7. int target = sum / k;
  8. if (target * k != sum) return false;
  9. return process(nums, 0, new int[k], target);
  10. }
  11. public boolean process(int[] nums, int i, int[] bucket, int target) {
  12. if (i == nums.length) return true;
  13. for (int j = 0; j < bucket.length; j++) {
  14. if (bucket[j] + nums[i] <= target) {
  15. bucket[j] += nums[i];
  16. if (process(nums, i + 1, bucket, target)) return true;
  17. bucket[j] -= nums[i];
  18. }
  19. }
  20. return false;
  21. }
  22. }

一把过,但是效率很低。

相关文章