程序员

力扣 90 子集 II

2020-11-14  本文已影响0人  zhaojinhui

题意:找出一个array的所有子集

思路:

  1. 把array排序
  2. dfs找出所有的组合
  3. 每次dfs中遍历index之后的所有数子,把他们加入temp list,并对新的temp list进行dfs

思想:DFS

复杂度:时间O(n2),空间O(n2)

class Solution {
    List<List<Integer>> res = new ArrayList();
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        Arrays.sort(nums);
        get(nums, 0, new ArrayList());
        return res;
    }
    
    void get(int[] nums, int index, List<Integer> list) {
        res.add(list);
        for(int i=index;i<nums.length;i++) {
            // 去除重复的情况
            if(i > index && nums[i] == nums[i-1]) {
                continue;
            }
            List<Integer> temp = new ArrayList(list);
            temp.add(nums[i]);
            get(nums, i+1, temp);
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读