-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path698.cpp
More file actions
30 lines (29 loc) · 1020 Bytes
/
Copy path698.cpp
File metadata and controls
30 lines (29 loc) · 1020 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
bool canPartitionKSubsets(vector<int> &nums, int k) {
int sum = 0, max_val = 0;
for (auto &m:nums) {
sum += m;
max_val = max(max_val, m);
}
if (sum % k != 0 || max_val > sum / k)
return false;
vector<bool> visited(nums.size(), false);
return BackTracking(sum / k, 0, sum / k, sum, nums, visited);
}
bool BackTracking(const int &sum, int pos, const int &sub, int left, vector<int> &nums, vector<bool> &visited) {
if (left == 0)
return true;
if (sub == 0)
return (BackTracking(sum, 0, sum, left - sum, nums, visited));
for (int i = pos; i < nums.size(); ++i) {
if (!visited[i] && sub >= nums[i]) {
visited[i] = true;
if (BackTracking(sum, i + 1, sub - nums[i], left, nums, visited))
return true;
visited[i] = false;
}
}
return false;
}
};