491. 递增子序列
class Solution {
public:
vector<vector<int>> res;
vector<int> vec;
vector<vector<int>> findSubsequences(vector<int>& nums) {
backtracking(nums,0);
return res;
}
void backtracking(vector<int> & nums, int index){
if (vec.size()>1){
res.push_back(vec);
}
unordered_set <int> uset;
for(int i=index;i<nums.size();i++){
if((!vec.empty()&& nums[i]<vec.back())||
uset.count(nums[i]))
continue;
uset.insert(nums[i]);
vec.push_back(nums[i]);
backtracking(nums,i+1);
vec.pop_back();
}
}
};
46. 全排列
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
int used[10];
vector<vector<int>> permute(vector<int>& nums) {
backtracking(nums);
return res;
}
void backtracking(vector<int> &nums){
if(path.size()==nums.size()){
res.push_back(path);
return;
}
for(int i=0;i<nums.size();i++){
if(used[i]) continue;
used[i]=1;
path.push_back(nums[i]);
backtracking(nums);
used[i]=0;
path.pop_back();
}
}
};
47. 全排列 II
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
int used[10];
vector<vector<int>> permute(vector<int>& nums) {
sort(nums.begin(),nums.end());
backtracking(nums);
return res;
}
void backtracking(vector<int> &nums){
if(path.size()==nums.size()){
res.push_back(path);
return;
}
for(int i=0;i<nums.size();i++){
if(i && nums[i-1]==nums[i] && used[i-1]==0)
continue;
if(used[i]) continue;
used[i]=1;
path.push_back(nums[i]);
backtracking(nums);
used[i]=0;
path.pop_back();
}
}
};