1. 程式人生 > 其它 >leetcode回溯法,給定重複元素,求出不重複的集合

leetcode回溯法,給定重複元素,求出不重複的集合

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;

        }
    }
}

  

https://www.programmercarl.com/0040.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CII.html#%E5%9B%9E%E6%BA%AF%E4%B8%89%E9%83%A8%E6%9B%B2

需要注意 全排列問題為什麼不用startIndex?