public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
subsets(result, new ArrayList<>(), nums, 0);
return result;
}
private void subsets(List<List<Integer>> result, List<Integer> tmp, int[] nums, int idx) {
result.add(new ArrayList<>(tmp));
for (int i = idx; i < nums.length; i++) {
tmp.add(nums[i]);
subsets(result, tmp, nums, i + 1);
tmp.remove(tmp.size() - 1);
}
}
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
Arrays.sort(nums);
subsetsWithDup(result, new ArrayList<>(), nums, 0);
return result;
}
private void subsetsWithDup(List<List<Integer>> result, List<Integer> tmp, int[] nums, int idx) {
result.add(new ArrayList<>(tmp));
for (int i = idx; i < nums.length; i++) {
if (i > idx && nums[i] == nums[i - 1]) {
continue;
}
tmp.add(nums[i]);
subsetsWithDup(result, tmp, nums, i + 1);
tmp.remove(tmp.size() - 1);
}
}
回溯法,subsets
最新推荐文章于 2020-08-12 16:14:12 发布