版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/glw0223/article/details/88601546
题面
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入:
输出:
和题46类似
https://blog.csdn.net/glw0223/article/details/88601043
源码
class Solution{
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
if (nums.size() <= 1){
return vector<vector<int>>{nums};
}
vector<vector<int>> out;
vector<int> tmpNums = vector<int>(nums.begin() + 1, nums.end());
vector<vector<int>> permutes = permuteUnique(tmpNums);
for (vector<int>& permute : permutes)
{
for (unsigned int i = 0; i <= permute.size(); ++i)
{
vector<int> tmp_permute = permute;
tmp_permute.insert(tmp_permute.begin() + i, nums[0]);
out.push_back(tmp_permute);
if(i<permute.size()&&permute[i]==nums[0]){
break;
}
}
}
return out;
}
};
测试代码
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
Solution solution;
std::vector<int> arr={1,2,1};
std::vector<std::vector<int>> result1=solution.permuteUnique(arr);
cout<<"-----"<<endl;
for (int i=0;i<result1.size();i++){
std::vector<int> temp=result1[i];
for(int j=0;j<temp.size();j++){
cout<<temp[j]<<" ";
}
cout<<endl;
}
return 0;
}