题目
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
- 输入: nums = [1,2,3]
- 输出:
[[3],[1],[2],
[1,2,3],[],
[1,3],[2,3], [1,2]]
思路一
通过递归调用函数返回子集,也包含了深度优先算法。
- 先排序(可以选择也可以不选择)
class Solution {
public List<List<Integer>> subsets(int[] nums) {
//step1:定义输出变量
List<List<Integer>> results = new ArrayList<>();
//Step2:判断异常
if(nums == null || nums.length == 0) return results;
//Step3:排序
Arrays.sort(nums);//可写可不写
//Step4:递归函数
List<Integer> subset = new ArrayList<>();
subsetHelper(nums, 0, subset, results);
//Step5:返回输出结果
return results;
}
//递归函数
private void subsetHelper(int[] nums, int startIndex,
List<Integer> subset, List<List<Integer>> results){
//克隆并添加到结果
results.add(new ArrayList<Integer>(subset));
for(int i = startIndex; i < nums.length; i++){
subset.add(nums[i]);
subsetHelper(nums, i+1, subset, results);
subset.remove(subset.size() - 1);
}
}
}