698. 划分为k个相等的子集
题目链接:698. 划分为k个相等的子集
代码如下:
class Solution
{
public:
bool canPartitionKSubsets(vector<int>& nums, int k)
{
int sum=accumulate(nums.begin(),nums.end(),0);
if(sum%k>0) {return false;}
int per=sum/k;
vector<int> cur(k,0);
function<bool(int)> dfs=[&](int i)->bool
{
if(i==nums.size()) {return true;}
for(int j=0;j<k;j++)
{
if(j&&cur[j]==cur[j-1]) {continue;}
cur[j]+=nums[i];
if(cur[j]<=per&&dfs(i+1)) {return true;}
cur[j]-=nums[i];
}
return false;
};
sort(nums.begin(),nums.end(),greater<int>());
return dfs(0);
}
};