力扣-78.子集
给你一个整数数组 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) → 终止