491.递增子序列
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(vector<int> nums, int index){
if(temp.size()>=2){
result.push_back(temp);
}
unordered_set<int> used_set;
for(int i=index; i<nums.size(); i++){
if(temp.size()>0 && temp.back()>nums[i]){
continue;
}
if(used_set.find(nums[i]) != used_set.end()){
continue;
}
used_set.insert(nums[i]);
temp.push_back(nums[i]);
backtracking(nums, i+1);
temp.pop_back();
}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
backtracking(nums, 0);
return result;
}
};
参考文章:代码随想录- 491.递增子序列
46.全排列
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(vector<int>& nums, vector<bool>& used){
if(temp.size() == nums.size()){
result.push_back(temp);
return ;
}
for(int i=0; i<nums.size(); i++){
if(used[i] == false){
used[i] = true;
temp.push_back(nums[i]);
backtracking(nums, used);
temp.pop_back();
used[i] = false;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> used(nums.size(), false);
backtracking(nums, used);
return result;
}
};
参考文章:代码随想录- 46.全排列
47.全排列 II
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(vector<int>& nums, vector<bool>& used){
if(temp.size() == nums.size()){
result.push_back(temp);
return ;
}
for(int i=0; i<nums.size(); i++){
if(i != 0 && nums[i]==nums[i-1] && used[i-1]==false){
continue;
}
if(used[i] == false){
used[i] = true;
temp.push_back(nums[i]);
backtracking(nums, used);
temp.pop_back();
used[i] = false;
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<bool> used(nums.size(), false);
backtracking(nums, used);
return result;
}
};
参考文章:代码随想录- 47.全排列 II