给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]]
示例 2:
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
提示:
1 <= nums.length <= 8
-10 <= nums[i] <= 10
- class Solution {
- public:
- vector
int>>res; - vector<int>path;
- void backtracking(vector<int>& nums,vector<int>used){
- if(path.size() == nums.size()){
- res.push_back(path);
- return;
- }
- for(int i = 0;i < nums.size();i++){
- //去重
- if(i > 0 && nums[i] == nums[i-1] && used[i-1] == 0) continue;
- if(used[i] == 0){
- path.push_back(nums[i]);
- used[i] = 1;
- backtracking(nums,used);
- used[i] = 0;
- path.pop_back();
- }
- else continue;
- }
- }
- vector
int>> permuteUnique(vector<int>& nums) { - //元素相同,不同位置的元素可以使用。
- //横向得去重
- sort(nums.begin(),nums.end());
- vector<int>used(nums.size(),0);
- backtracking(nums,used);
- return res;
- }
- };