491.递增子序列
C++:需注意可以back()直接用
class Solution {
public:
vector<vector<int>> res;
vector<int> temp;
vector<vector<int>> findSubsequences(vector<int>& nums) {
backTracking(nums,0);
return res;
}
void backTracking(vector<int>&nums,int index){
if(temp.size()>1)
res.push_back(temp);
unordered_set<int> used;
for(int i=index;i<nums.size();i++){
if((!temp.empty()&&temp.back()>nums[i])
||used.count(nums[i]))
continue;
used.insert(nums[i]);
temp.push_back(nums[i]);
backTracking(nums,i+1);
temp.pop_back();
}
}
};
46.全排列
C++:used vector<bool>
class Solution {
public:
vector<vector<int>>res;
vector<int> temp;
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> used(nums.size(),false);
backTracking(nums,used);
return res;
}
void backTracking(vector<int>&nums,vector<bool>&used){
if(temp.size()==nums.size()){
res.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;
}
//continue;
}
}
};
C++:swap
class Solution {
public:
vector<vector<int>> res;
vector<int> temp;
void backTracking(vector<int>&nums,int index){
if(index==nums.size()){
res.push_back(nums);
return;
}
for(int i=index;i<nums.size();i++){
swap(nums[i],nums[index]);
backTracking(nums,index+1);
swap(nums[i],nums[index]);
}
}
vector<vector<int>> permute(vector<int>& nums) {
if(nums.size()==0) return res;
backTracking(nums,0);
return res;
}
};
47.全排列 II
C++:vector<bool>
class Solution {
public:
vector<vector<int>> res;
vector<int> temp;
vector<vector<int>> permuteUnique(vector<int>& nums) {
if(nums.size()==0) return res;
vector<bool> used(nums.size(),false);
backTracking(nums,used);
return res;
}
void backTracking(vector<int>&nums,vector<bool>&used){
if(temp.size()==nums.size()){
res.push_back(temp);
return;
}
unordered_set<int> visited;
for(int i=0;i<nums.size();i++){
if(used[i]==true) continue;
if(visited.count(nums[i])) continue;
visited.insert(nums[i]);
used[i]=true;
temp.push_back(nums[i]);
backTracking(nums,used);
temp.pop_back();
used[i]=false;
}
}
};
C++:swap
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> res;
backTracking(res,nums,0);
return res;
}
void backTracking(vector<vector<int>> &res,vector<int>&nums,int index){
if(index==nums.size()-1){
res.push_back(nums);
return;
}
unordered_set<int> visited;
for(int i=index;i<nums.size();i++){
if(visited.count(nums[i]))
continue;
visited.insert(nums[i]);
swap(nums[i],nums[index]);
backTracking(res,nums,index+1);
swap(nums[i],nums[index]);
}
}
};