491.递增子序列
vector<vector<int>> all;
vector<int> one;
void backing(vector<int>& nums, int startindex) {
if (one.size() >= 2) {
all.push_back(one);
}
unordered_set<int> s1;
for (int i = startindex; i < nums.size(); i++) {
if ((!one.empty() && nums[i] < one.back()) ||
s1.find(nums[i]) != s1.end()) {
continue;
}
s1.insert(nums[i]);
one.push_back(nums[i]);
backing(nums, i + 1);
one.pop_back();
}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
all.clear();
one.clear();
backing(nums, 0);
return all;
}
46.全排列
vector<vector<int>> all;
vector<int> one;
void backing(vector<int>& nums,vector<bool> b1){
if(one.size()==nums.size()){
all.push_back(one);return;
}
for(int i=0;i<nums.size();i++){
if(b1[i]==false){
one.push_back(nums[i]);
b1[i]=true;
backing(nums,b1);
one.pop_back();
b1[i]=false;
}else{
continue;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> b1(nums.size(),false);
backing(nums,b1);
return all;
}
47.全排列 II
vector<vector<int>> all;
vector<int> one;
void backing(vector<int>& nums,vector<bool> b1){
if(one.size()==nums.size()){
all.push_back(one);return;
}
for(int i=0;i<nums.size();i++){
if(i>0&&b1[i-1]==false&&nums[i]==nums[i-1]){
continue;
}
if(b1[i]==false){
one.push_back(nums[i]);
b1[i]=true;
backing(nums,b1);
one.pop_back();
b1[i]=false;
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<bool> b1(nums.size(),false);
backing(nums,b1);
return all;
}