给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]
对比46题增加了used数组,判断该数上次是否使用过。
TIME:O(N!)
SPACE:O(N)
1 class Solution { 2 public List
> permuteUnique(int[] nums) { 3 List
> res = new ArrayList<>(); 4 if(nums.length == 0 || nums==null)return res; 5 Arrays.sort(nums); 6 helper(res,new ArrayList<>(),nums,new boolean[nums.length]); 7 return res; 8 } 9 public void helper(List
> res,List list,int[] nums,boolean[] used){10 if(list.size() == nums.length){11 res.add(new ArrayList<>(list));12 13 }14 for(int i = 0;i < nums.length;i++){15 if(used[i] || i > 0 && nums[i] == nums[i - 1] && used[i-1])continue;16 used[i] = true;17 list.add(nums[i]);18 helper(res,list,nums,used);19 20 list.remove(list.size() - 1);21 used[i]=false;22 }23 }24 25 }