P47 全排列 II

这个题目和上一题不同的是它,有重复的数字。
解决方法也很简单,先排序判断这是第几个相同的位置
class Solution {
public:
void dfs(int x,vector<int> &ras,vector<vector<int>> &ans,vector<int> k,vector<int> st){
if(x == ras.size()){
ans.push_back(k);
return ;
}
for(int i = 0;i < ras.size();i++){
if(!st[i]){
if(i && ras[i-1] == ras[i] && !st[i-1]) continue;
k.push_back(ras[i]);
st[i] = true;
dfs(x + 1, ras, ans, k, st);
k.pop_back();
st[i] = false;
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> k;
vector<int> st(nums.size() , false);
sort(nums.begin(),nums.end());
dfs(0, nums , ans , k , st);
return ans;
}
};
