LeetCode491
题目:
解法:(注意不需要return)
class Solution {
public:
vector<vector<int>> result;
vector<int> vec;
void backtracing(vector<int>& nums,int index){
if(vec.size() > 1){
result.push_back(vec);
}
unordered_set<int> used;
for(int i = index;i < nums.size();i++){
if((!vec.empty() && nums[i] < vec.back())|| used.find(nums[i])!= used.end()) continue;
vec.push_back(nums[i]);
used.insert(nums[i]);
backtracing(nums, i + 1);
vec.pop_back();
}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
backtracing(nums,0);
return result;
}
};
Leetcode46
题目:
解法:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracing(vector<int>&nums,vector<bool>& used){
if(path.size() == nums.size()){
result.push_back(path);
return;
}
for(int i = 0; i < nums.size();i++){
if(used[i] == false){
path.push_back(nums[i]);
used[i] = true;
backtracing(nums, used);
used[i] = false;
path.pop_back();
}
else continue;
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> used(nums.size(),false);
backtracing(nums, used);
return result;
}
};
LeetCode47
题目:
解法:
(注意使用if(used[i] == false)保证可以遍历到没使用过的点)
class Solution {
public:
vector<vector<int>> result;
vector<int> vec;
void backtracing(vector<int>& nums,vector<bool> used){
if(vec.size() == nums.size()){
result.push_back(vec);
return;
}
for(int i = 0;i < nums.size(); i++){
if((i > 0 && nums[i - 1] == nums[i]) && used[i - 1] == false) continue;
if(used[i] == false){
vec.push_back(nums[i]);
used[i] = true;
backtracing(nums,used);
used[i] = false;
vec.pop_back();
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<bool> used(nums.size(),false);
backtracing(nums,used);
return result;
}
};