Skip to content

Commit 3e79dda

Browse files
Create partition_to_k_equal_subsets.cpp
1 parent 14d95a3 commit 3e79dda

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

partition_to_k_equal_subsets.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution {
2+
public:
3+
int n;
4+
int visited[17];
5+
6+
bool possible(vector<int>& nums, int numsIndex, int currSum, int& subsetSum, int k) {
7+
if(k == 1)
8+
return true;
9+
10+
if(currSum == subsetSum) {
11+
return possible(nums, n-1, 0, subsetSum, k-1);
12+
}
13+
14+
for(int i = numsIndex; i>=0; i--) {
15+
if(visited[i] || currSum+nums[i] > subsetSum)
16+
continue;
17+
18+
visited[i] = 1;
19+
currSum += nums[i];
20+
21+
if(possible(nums, i+1, currSum, subsetSum, k))
22+
return true;
23+
24+
visited[i] = 0;
25+
currSum -= nums[i];
26+
}
27+
28+
return false;
29+
}
30+
31+
bool canPartitionKSubsets(vector<int>& nums, int k) {
32+
int sum = accumulate(begin(nums), end(nums), 0);
33+
34+
memset(visited, 0, sizeof(visited));
35+
n = nums.size();
36+
37+
if(sum%k != 0)
38+
return false;
39+
40+
int subsetSum = sum/k;
41+
int numsIndex = n-1;
42+
int currSum = nums[numsIndex];
43+
visited[numsIndex] = 1;
44+
45+
return possible(nums, numsIndex, currSum, subsetSum, k);
46+
47+
}
48+
};

0 commit comments

Comments
 (0)