1 力扣题78:子集
1.1 题目描述
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
1.2 思路分析
1.2.1 回溯
这题是标准的回溯可解问题。边界判断,顺序遍历,条件判断,符合深入回溯,不符合剪枝。要注意的是这个是求子集,因此不需要顺序判断,只需要两次深入即可。
1.3 代码实现
1.3.1 回溯
public List<List<Integer>> result = new ArrayList<>();
public int[] arr = new int[0];
public List<Integer> list = new ArrayList();
public int depth = 0;
public List<List<Integer>> subsets(int[] nums) {
arr = nums;
depth = nums.length;
backTrack(0);
return result;
}
public void backTrack(int cDepth) {
if (cDepth==depth) {
ArrayList<Integer> newList = new ArrayList<>(list);
result.add(newList);
return;
}
list.add(arr[cDepth]);
backTrack(cDepth+1);
list.remove(list.size()-1);
backTrack(cDepth+1);
}
1.4 力扣注意事项
在力扣上写代码不要出现static,否则输出结果会混乱,实际上也不需要出现static,因为没有主函数,都是方法。