class Solution {
private:
vector<pair<int, int>> freq;
vector<vector<int>> ans;
vector<int> sequence;
public:
void dfs(int pos, int rest) {
if (rest == 0) {
ans.push_back(sequence);
return;
}
if (pos == freq.size() || rest < freq[pos].first) {
return;
}
dfs(pos + 1, rest);
int most = min(rest / freq[pos].first, freq[pos].second);
for (int i = 1; i <= most; ++i) {
sequence.push_back(freq[pos].first);
dfs(pos + 1, rest - i * freq[pos].first);
}
for (int i = 1; i <= most; ++i) {
sequence.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
for (int num: candidates) {
if (freq.empty() || num != freq.back().first) {
freq.emplace_back(num, 1);
} else {
++freq.back().second;
}
}
dfs(0, target);
return ans;
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/0bdea36a4d0c48e7a53a300fb4ae920b.jpeg)
class Solution {
public:
void backtrack(vector<vector<int>>& res, vector<int>& output, int first, int len){
if (first == len) {
res.emplace_back(output);
return;
}
for (int i = first; i < len; ++i) {
swap(output[i], output[first]);
backtrack(res, output, first + 1, len);
swap(output[i], output[first]);
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > res;
backtrack(res, nums, 0, (int)nums.size());
return res;
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/8cb52158c2624626b579dbfd43d51967.jpeg)
class Solution {
public:
bool dfs(int index, vector<int> &matchsticks, vector<int> &edges, int len) {
if (index == matchsticks.size()) {
return true;
}
for (int i = 0; i < edges.size(); i++) {
edges[i] += matchsticks[index];
if (edges[i] <= len && dfs(index + 1, matchsticks, edges, len)) {
return true;
}
edges[i] -= matchsticks[index];
}
return false;
}
bool makesquare(vector<int> &matchsticks) {
int totalLen = accumulate(matchsticks.begin(), matchsticks.end(), 0);
if (totalLen % 4 != 0) {
return false;
}
sort(matchsticks.begin(), matchsticks.end(), greater<int>());
vector<int> edges(4);
return dfs(0, matchsticks, edges, totalLen / 4);
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/af15406d962d46b6983c6fd7e984b5a5.jpeg)