【子集回溯】Leetcode 78. 子集 90. 子集 II
- 78. 子集
- 90. 子集 II
---------------🎈🎈78. 子集 题目链接🎈🎈-------------------
78. 子集
class Solution {
List<List<Integer>> result= new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
result.add(new ArrayList<>());
helper(nums,0);
return result;
}
List<Integer> resulttemp = new ArrayList<>();
public void helper(int[] nums, int start){
for(int i = start; i < nums.length; i++){
resulttemp.add(nums[i]);
result.add(new ArrayList<>(resulttemp));
helper(nums,i+1);
resulttemp.removeLast();
}
}
}
---------------🎈🎈90. 子集 II 题目链接🎈🎈-------------------
90. 子集 II
使用一个flag 树层去重——当前层如果遇到相同的就跳过 【去重前记得排序!】
class Solution {
List<List<Integer>> result = new ArrayList<>();
List<Integer> resulttemp = new ArrayList<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
Arrays.sort(nums);
result.add(resulttemp);
helper(nums,0);
return result;
}
public void helper(int[] nums, int start){
boolean flag = false;
for(int i = start; i < nums.length; i++){
if(flag && nums[i] == nums[i-1] ){
continue;
}
flag = true;
resulttemp.add(nums[i]);
result.add(new ArrayList<>(resulttemp));
helper(nums,i+1);
resulttemp.removeLast();
}
}
}