此题是全排列问题的变形,给出的列表中有重复数字,需要去重。解决全排列问题的思路参见DFS-全排列问题
去重思路:以[1,2,2]为例,可以要求index=1的数字2在最后生成的排列中一定要在index=2的数字2的前面,强制规定了顺序,避免了重复。即先从小到大排序,使相同的数字聚在一起,若前后2个数字相同,访问后一个数字的时候,前一个数字必须已经访问过了。只需添加一行代码
if(i>0&&nums[i]==nums[i-1]&&!visited[i-1]) continue;
完整的代码如下:
class Solution {
public:
/*
* @param : A list of integers
* @return: A list of unique permutations
*/
vector<vector<int>> permuteUnique(vector<int> &nums) {