难度:中等。
标签:回溯算法。
我的思路:
首先给输入序列进行排序,然后相比上一题【46. 全排列】,添加第10行的代码。
不让重复的元素出现在seq中的同一个位置即可。
正确解法:
class Solution {
vector<vector<int>> result;
void recursion(vector<int>& seq, vector<int>& now_seq, int n){
if(n == now_seq.size()){
result.emplace_back(now_seq);
return;
}
for(int i = 0; i < seq.size(); i++){
if(i > 0 && seq[i] == seq[i - 1])continue;
int k = seq[i];
now_seq.emplace_back(k);
seq.erase(seq.begin() + i);
recursion(seq, now_seq, n);
seq.insert(seq.begin() + i, k);
now_seq.pop_back();
}
}
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<int> now_seq;
recursion(nums, now_seq, nums.size());
return result;
}
};
结果: