难度:medium
与以往的回溯题不同的是:
1.以前的收集的是树的叶子节点,这次收集的是每个节点;
2.注意是不重复取元素的,所以 for 中 i 初始值为 startIndex;
class Solution {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
// ans.add(new ArrayList<>());
backtracking(nums, 0);
return ans;
}
public void backtracking(int[] nums, int startIndex) {
// 收集的是树的每个节点,所以放在判断终止语句的外面
ans.add(new ArrayList<>(path));
if (startIndex >= nums.length) {
return;
}
for (int i = startIndex; i < nums.length; i++) {
path.add(nums[i]);
backtracking(nums, i + 1);
path.remove(path.size() - 1);
}
}
}