Subsets & Combinations & Combination Sum
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> rst = new ArrayList<>();
dfs(rst, new ArrayList<>(), nums, 0);
return rst;
}
private void dfs(List<List<Integer>> rst, List<Integer> list, int[] nums, int start){
//if(start > nums.length) return;
rst.add(new ArrayList<Integer>(list));
for(int i = start; i < nums.length; i++){
list.add(nums[i]);
dfs(rst, list, nums, i + 1);
list.remove(list.size() - 1);
}
}
}注意这里内外循环的顺序不能错,要先按 sum 从小到大的顺序看,然后才是遍历每个元素。因为所谓 bottom-up,是相对于 sum 而言的,不是相对于已有元素的 index 而言的。
可以看到,在只取 min/max 的时候我们不同的循环顺序都能保证正确答案;但是求解的数量时,要以 target value 为外循环。
Last updated