leetcode回溯法,給定重複元素,求出不重複的集合
阿新 • • 發佈:2022-01-02
class Solution { List<List<Integer>> lists = new ArrayList<List<Integer>>(); LinkedList<Integer> list = new LinkedList<Integer>(); boolean[] used; public List<List<Integer>> permuteUnique(int[] nums) { if(nums.length == 0) return lists; Arrays.sort(nums); used = new boolean[nums.length]; backTracking(nums); return lists; } public void backTracking(int[] nums){ if(list.size() ==nums.length) lists.add(new ArrayList<Integer>(list)); for(int i =0;i<nums.length;i++){ // 條件1不能重複選取同一個元素 if(used[i]){ continue; } // 條件2同樹層不能選取相同的元素 但是同樹枝可以選取同一個元素 if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) { continue; } list.add(nums[i]); used[i] = true; backTracking(nums); list.removeLast(); used[i] = false; } } }
需要注意 全排列問題為什麼不用startIndex?