解题思路
递归 + 回溯
每一个节点都会有两种选择,选或者不选
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { private List<List<Integer>> res = new ArrayList<>(); private List<Integer> tmp = new ArrayList<>(); private int path_len = 0;
public List<List<Integer>> subsets(int[] nums) { dfs(nums); return res; }
private void dfs(int[] nums) { if(path_len == nums.length) { res.add(new ArrayList<>(tmp)); return; }
tmp.add(nums[path_len]); path_len ++; dfs(nums); path_len --; tmp.remove(tmp.size() - 1);
path_len ++; dfs(nums); path_len --; } }
|