47. 全排列 II
题目描述
给定一个可包含重复数字的序列 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
思路
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permuteUnique = function(nums) {
let result = [];
let temp = [];
let len = nums.length;
nums.sort((a,b)=>{return a-b;})
let find = function(visited){
if(temp.length === len){
result.push(temp.slice());
return;
}
for(let i = 0; i < len; i++){
// 去重操作 如果当前节点与上一节点的相等 退出本次循环
if(i > 0 && nums[i] === nums[i-1] && visited[i-1]===true ) continue;
//当前节点未被访问
if(visited[i] !== true){
visited[i] = true;
temp.push(nums[i]);
find(visited);
temp.pop();
visited[i] = false;
}
}
}
find([]);
return result;
};