正确解法:
class Solution {
private:
int n;
int target;
bool dfs(int k, int tmpsum, int used, vector<int>& nums)
{
if(k == 1) return true;
for (int i = 0; i < n; ++i)
{
if(used & (1 << i)) continue;
if(tmpsum + nums[i] > target) return false; //重要的剪枝,否则会超时,例如用例 5,5,5,5,16,4,4,4,4,4,3,3,3,3,4, k = 4
else if(tmpsum + nums[i] == target && dfs(k-1, 0, (used | (1 << i)), nums)) return true;
else if(dfs(k, tmpsum + nums[i], used | (1 << i), nums)) return true;
}
return false;
}
public:
bool canPartitionKSubsets(vector<int>& nums, int k) {
n = nums.size();
int sum = 0;
for(int i :