您的位置:首页 > 其它

LeetCode#698 Partition to K Equal Sum Subsets(week19)

2018-01-13 14:49 585 查看

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];
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode recursive