week19
题目
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.
Note:
1 <= k <= len(nums) <= 16.
0 < nums[i] < 10000.
原题地址:https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/
代码
class Solution {
public:
bool f = false;
bool canPartitionKSubsets(vector<int>& nums, int k) {
int sum = 0;
for (int i = 0; i < nums.size(); ++i) {
sum += nums[i];
}
if (sum % k != 0) {
return false;
}
int subsum = sum / k;
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] > subsum) {
return false;
}
}
sort(nums.begin(), nums.end());
reverse(nums.begin(), nums.end());
vector<int> res(k, 0);
dfs(nums, 0, res, subsum);
return f;
}
void dfs(vector<int>& nums, int pos, vector<int>& res, int subsum) {
if (f) {
return;
}
if (pos == nums.size()) {
bool judge = true;
for (int i = 0; i < res.size(); ++i) {
if (res[i] != subsum) {
judge = false;
return;
}
}
if (judge) {
f = true;
}
return;
}
for (int i = 0; i < res.size(); ++i) {
if (res[i] + nums[pos] <= subsum) {
res[i] += nums[pos];
dfs(nums, pos + 1, res, subsum);
res[i] -= nums[pos];
}
}
}
};