题意:找出一个array的所有子集
思路:
- 把array排序
- dfs找出所有的组合
- 每次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);
}
}
}
网友评论