Fork me on GitHub

【补档 12th Jan】子集2

【补档 12th Jan】子集2

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
class Solution {
    List<List<Integer>> res = new LinkedList<List<Integer>>();
    boolean[] flags;
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        int num_len = nums.length;
        Arrays.sort(nums);
        LinkedList<Integer> track = new LinkedList<Integer>();
        backtrack(nums,0,num_len,track);
        return res;
    }

    public void backtrack(int[] nums, int start, int length, LinkedList<Integer> track){
        res.add(new ArrayList(track));
        for(int i = start; i < length; i++){
          	//先判断 && 之前的语句 如果是false 就不执行后面的语句
            if(i != start && nums[i] == nums[i-1]){
              //continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。
              //break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可以结束其外层循环
              continue;
            }
            track.addLast(nums[i]);
            backtrack(nums,i+1,length,track);
            track.removeLast();
        }
    }
}
posted @ 2023-01-14 23:51  RickieRun  阅读(28)  评论(0)    收藏  举报
Live2D