思路展示
为了排除这些重复方案,需在固定某位元素时,保证“每种元素只在此位固定一次”,即遇到重复元素时不交换,直接跳过,从而将生成重复排列的搜索分支进行“剪枝”
示例代码
class Solution {
public:
vector<vector<int>> res;
int len;
void dfs(vector<int>& nums,int pos){
if(pos==len-1){
res.push_back(nums);
return;
}
set<int> st;
for(int i=pos;i<len;i++){
if(st.find(nums[i])!=st.end()){
continue;
}
st.insert(nums[i]);
swap(nums[i],nums[pos]);
dfs(nums,pos+1);
swap(nums[i],nums[pos]);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
len=nums.size();
dfs(nums,0);
return res;
}
};
效果展示