题目
思路
- 思路一:可以直接从后遍历,遇到一个数就把所有子集加上该数组成新的子集,遍历完毕即是所有子集
-
代码
```java public List
- > subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();res.add(new ArrayList<>());for (int i = 0; i < nums.length; i++) {int size = res.size();for (int j = 0; j < size; j++) {List<Integer> list = new ArrayList<>(res.get(j));list.add(nums[i]);res.add(list);}}return res;
}
//2.dfs + 回溯 public List
- > subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>(); backtrack(0, nums, res, new ArrayList<Integer>()); return res;}
private void backtrack(int i, int[] nums, List
- > res, ArrayList
tmp) { res.add(new ArrayList<>(tmp)); for (int j = i; j < nums.length; j++) { tmp.add(nums[j]); backtrack(j + 1, nums, res, tmp); tmp.remove(tmp.size() - 1); }}
``` 子集
