Problem 2 Subset II with duplication
repeat
Method 1(每一层就是加不加,你只能加第一个)
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums == null || nums.length == 0) {
return result;
}
Arrays.sort(nums);
List<Integer> current = new ArrayList<>();
backTracking(result, nums, current, 0);
return result;
}
// index: 当前层我正要考虑的元素
private void backTracking(List<List<Integer>> result, int[] nums, List<Integer> current, int index) {
if (index = nums.length) {
result.add(new ArrayList<>(current));
return;
}
// add
current.add(nums[index]);
backTracking(result, nums, current, index + 1);
current.remove(current.size() - 1);
// not add
while (index + 1 < nums.length && nums[index + 1] == nums[index]) {
index++;
}
backTracking(result, nums, current, index + 1);
}Method 2(只取第一个&& i == index || nums[i] != nums[i - 1] && 注意while的位置和while的条件是看在同一层,下一次加的点一不一样)
Method 3& 4(不sorted & 用set chasing result)
Last updated