题目描述
点这里.
思路分析
dfs的简单应用。
全局变量ans记录答案,path记录搜索路径。st记录每个数是否已经使用。
注意处理“重复数字“:排序让重复数字相邻,然后规定相同数字只能从前往后选。这样可以保证ans中方案不重复。
另外注意回溯st数组。
代码实现
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
vector<bool> st;
vector<vector<int>> permuteUnique(vector<int>& nums) {
path=vector<int>(nums.size());
st=vector<bool>(nums.size());
sort(nums.begin(),nums.end());
dfs(nums,0);
return ans;
}
void dfs(vector<int>& nums,int u){
if(u==nums.size()){
ans.push_back(path);
return;
}
for(int i=0;i<nums.size();i++){
if(st[i]) continue;
if(i&&nums[i-1]==nums[i]&&!st[i-1]) continue;
st[i]=true;
path[u]=nums[i];
dfs(nums,u+1);
st[i]=false;
}
}
};