给你一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> path = new ArrayList<>();
void backtracking(int[] nums, int startIndex){
res.add(new ArrayList<>(path));
for (int i = startIndex; i < nums.length; i++) {
path.add(nums[i]);
backtracking(nums,i+1);
path.remove(path.size()-1);
}
}
public List<List<Integer>> subsets(int[] nums) {
backtracking(nums, 0);
return res;
}
}
小结:又是一道回溯的经典题目,回溯过程如下:
初始调用:backtracking(nums, 0)
│
├─ i=0 → path=[1] → 递归 backtracking(nums,1)
│ ├─ i=1 → path=[1,2] → 递归 backtracking(nums,2)
│ │ └─ i=2 → path=[1,2,3] → 递归 backtracking(nums,3) → 终止
│ └─ i=2 → path=[1,3] → 递归 backtracking(nums,3) → 终止
│
├─ i=1 → path=[2] → 递归 backtracking(nums,2)
│ └─ i=2 → path=[2,3] → 递归 backtracking(nums,3) → 终止
│
└─ i=2 → path=[3] → 递归 backtracking(nums,3) → 终止