一:论语
二:题目
三:上码
1:思路一
class Solution {
public:
vector<vector<int> > ans;
vector<int>path;
void backstacking(vector<int>&nums, vector<bool>&visited) {
if(path.size() == nums.size()) {
ans.push_back(path);
return ;
}
unordered_set<int> st;
for(int i = 0; i < nums.size(); i++) {
if(visited[i] == true) continue;
if(!st.empty()&&st.find(nums[i]) != st.end() && visited[i] == false){
continue;
}
st.insert(nums[i]);
visited[i] = true;
path.push_back(nums[i]);
backstacking(nums,visited);
path.pop_back();
visited[i] = false;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<bool> v(nums.size(),false);
backstacking(nums,v);
return ans;
}
};
2:思路二
class Solution {
public:
vector<vector<int> > ans;
vector<int>path;
void backstacking(vector<int>&nums, vector<bool>&visited) {
if(path.size() == nums.size()) {
ans.push_back(path);
return ;
}
for(int i = 0; i < nums.size(); i++) {
if(visited[i] == true) continue;
if(i > 0 && nums[i-1] == nums[i] && visited[i-1] == true) continue;
visited[i] = true;
path.push_back(nums[i]);
backstacking(nums,visited);
path.pop_back();
visited[i] = false;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<bool> v(nums.size(),false);
sort(nums.begin(),nums.end());
backstacking(nums,v);
return ans;
}
};