Part1:题目描述
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.
Part2:解题思路
这一题我觉得对我来说还是挺难的,借鉴了leetcode上面的解法才得以解决,要再更深入的理解才行
Part3:代码
class Solution { public: bool search(vector<int>groups, int row, vector<int>& nums, int target) { if (row < 0) return true; // 执行完这一句之后row的值才会变 int v = nums[row--]; for (int i = 0; i < groups.size(); i++) { if (groups[i] + v <= target) { groups[i] += v; if (search(groups, row, nums, target)) return true; groups[i] -= v; } if (groups[i] == 0) break; } return false; } bool canPartitionKSubsets(vector<int>& nums, int k) { int length = nums.size(); int sum = 0; for (int i = 0; i < length; i++) { sum += nums[i]; } if ((sum % k) != 0) return false; int target = sum / k; sort(nums.begin(), nums.end()); int row = length - 1; if(nums[row] > target) return false; while (row >= 0 && nums[row] == target) { row--; k--; } return search(vector<int>(k), row, nums, target); } };
本文探讨了一道关于将数组等分为多个子集的问题,并提供了一种解决方案。输入为一整数数组与目标子集数量,目标是判断是否能将数组等分为指定数量的子集,且各子集之和相等。文章通过示例说明了问题背景,并分享了一个基于回溯搜索的解题思路及代码实现。
3396

被折叠的 条评论
为什么被折叠?



