78.子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
遍历树的时候,所有结点都记录下来,就是结果的要求,即在递归函数开头就添加到结果集中。每次变化都需要添加到结果集中。
package com.programmercarl.backtracking;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
* @ClassName Subsets
* @Descriotion TODO
* @Author nitaotao
* @Date 2022/7/10 18:16
* @Version 1.0
* https://leetcode.cn/problems/subsets/
* 78. 子集
**/
public class Subsets {
List<List<Integer>> result = new ArrayList<>();
Stack<Integer> stack = new Stack();
public List<List<Integer>> subsets(int[] nums) {
backtracking(nums, 0);
System.out.println(result);
return result;
}
/**
* @param nums 数字数组
* @param startIndex
*/
public void backtracking(int[] nums, int startIndex) {
//直接添加
result.add(new ArrayList(stack));
for (int i = startIndex; i < nums.length; i++) {
stack.push(nums[i]);
// 添加每次递归后的结果
backtracking(nums, i + 1);
//回溯
stack.pop();
}
}
public static void main(String[] args) {
new Subsets().subsets(new int[]{1, 2, 3});
}
}