题号:no44
题目名:幂集
原题URL:https://leetcode-cn.com/problems/power-set-lcci/
题目描述
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例
示例 1:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
思路
1.1,2,3,可以先加123,删掉3,加12,删掉2,加1…
2.思路就是dfs+剪枝,也就是回溯算法
//回溯模板
private void backtrack("原始参数") {
//终止条件(递归必须要有终止条件)
if ("终止条件") {
//一些逻辑操作(可有可无,视情况而定)
return;
}
for (int i = "for循环开始的参数"; i < "for循环结束的参数"; i++) {
//一些逻辑操作(可有可无,视情况而定)
//做出选择
//递归
backtrack("新的参数");
//一些逻辑操作(可有可无,视情况而定)
//撤销选择
}
}
解题代码
public class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
List<Integer> list = new ArrayList<>();
subset(nums,list,0);
return res;
}
private void subset(int[] nums,List<Integer> list, int start) {
res.add(new ArrayList<Integer>(list));
for (int i = start; i < nums.length; i++) {
list.add(nums[i]);
subset(nums,list,i+1);
list.remove(list.size()-1);
}
}
}