题目描述
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
输入:nums = [ 1 , 2 , 3 ]
输出:[ [ ] , [ 1 ] , [ 2 ] , [ 1 , 2 ] , [ 3 ] , [ 1 , 3 ] , [ 2 , 3 ] , [ 1 , 2 , 3 ] ]
力扣:78.子集
如果有了 组合总和 系列刷题经历,此题就大同小异,无非就是排序,此题中加入到 结果集 result 中的情况,不是根据某一个终止条件确定的,而是所有添加的过程,每一次添加都会构成一个新的子集,都是解中的一个情况。
class Solution {
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
List<Integer> path = new ArrayList<>();
backtracking(path , nums , 0);
return result;
}
public void backtracking(List<Integer> path , int[] nums , int start){
// 这里不同,之前都是在 位置2 处得到一种解的情况,
// 本题中每次新加元素都是一个 新的子集 , 一种解
result.add(new ArrayList<>(path)); // 1
if(start == nums.length){
// 2
return ;
}
for(int i = start ; i < nums.length ; i ++){
path.add(nums[i]);
backtracking(path , nums , i + 1);
path.remove(path.size() - 1);
}
}
}