难度中等352收藏分享切换为英文关注反馈
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ]
解题思路:记忆回溯
class Solution {List<List<Integer>> list;public List<List<Integer>> permuteUnique(int[] nums) {list = new ArrayList<List<Integer>>();if(nums == null || nums.length <= 0) return list;Arrays.sort(nums);help(nums,new boolean[nums.length],new ArrayList<Integer>());return list;}private void help(int nums[], boolean[] type , ArrayList<Integer> newlist ){if(newlist.size() == nums.length){list.add(new ArrayList<>(newlist));return;}for(int i = 0 ; i< nums.length ;i++){if(type[i] ) continue;if(i>0 && nums[i-1] == nums[i] && type[i-1]) continue;type[i]= true;newlist.add(nums[i]);help(nums,type,newlist);type[i] = false;newlist.remove(newlist.size()-1);}}}