We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/permutations-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本题和全排列-46 的思路是一样的,只是在每次递归保存的时候,利用 Set 去重的特性,把每个值用字符串拼接的方式丢进 set 里去重,最后再处理成题目需要的格式即可。
Set
let uniqSymbol = 'X' let permuteUnique = function (nums) { let n = nums.length if (n === 1) { return [nums] } let permuteSet = (nums) => { let n = nums.length if (n === 0) { return new Set() } if (n === 1) { return new Set(nums) } let res = new Set() for (let i = 0; i < n; i++) { let use = nums[i] if (use === undefined) { continue } let rest = nums.slice(0, i).concat(nums.slice(i + 1, n)) let restPermuteds = permuteSet(rest) restPermuteds.forEach((restPermuted) => { res.add(`${use}${uniqSymbol}${restPermuted}`) }) } return res } let permuted = permuteSet(nums) return Array.from(permuted).map((val) => val.split(uniqSymbol).map(Number)) }
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
本题和全排列-46 的思路是一样的,只是在每次递归保存的时候,利用
Set去重的特性,把每个值用字符串拼接的方式丢进 set 里去重,最后再处理成题目需要的格式即可。