视频题解说得很清楚https://leetcode-cn.com/problems/permutations-ii/solution/hui-su-suan-fa-python-dai-ma-java-dai-ma-by-liwe-2/ (我基本上就是把java翻译成c++)
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
int len=nums.size();
vector<vector<int>> re;
if(len==0) return re;
sort(nums.begin(),nums.end());
bool used[len];
int i;
for(i=0;i<len;++i) used[i]=0;
vector<int> path;
dfs(0,len,re,used,nums,path);
return re;
}
void dfs(int depth,int len,vector<vector<int>> &re,bool used[],vector<int> &nums,vector<int> &path){
if(depth==len){
re.push_back(path); //形成一条path
return;
}
int i;
for(i=0;i<len;++i){
if(used[i]) continue;
if(i>0&&nums[i]==nums[i-1]&&used[i-1]==0) //如果相邻数字相等,并且前数字已经撤回,则eg.11与11相同,后面的不用看了,一定是跟第一个11重复的
continue;
path.push_back(nums[i]); //记入path
used[i]=1;
dfs(depth+1,len,re,used,nums,path);
path.pop_back(); //退回
used[i]=0;
}
}
};