给「代码随想录」一个星标吧!
❝
通知:很多录友都反馈之前看「算法汇总」的目录要一直往下拉,很麻烦,这次Carl将所有历史文章汇总到一篇文章中,有一个整体的目录,方便录友们从前面系列开始打卡了,依然在公众号左下角「算法汇总」,「算法汇总」会持续更新,大家快去瞅瞅!
给定一个可包含重复数字的序列 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
思路
这道题目和回溯算法:排列问题!的区别在于「给定一个可包含重复数字的序列」,要返回「所有不重复的全排列」。
这里又涉及到去重了。
在回溯算法:求组合总和(三) 、回溯算法:求子集问题(二)我们分别详细讲解了组合问题和子集问题如何去重。
那么排列问题其实也是一样的套路。
「还要强调的是去重一定要对元素进行排序,这样我们才方便通过相邻的节点来判断是否重复使用了」。
我以示例中的 [1,1,2]为例 (为了方便举例&#