题干
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-set-lcci
思路
backtrack的模板
private void backtrack("原始参数") {
//终止条件(递归必须要有终止条件)
if ("终止条件") {
//一些逻辑操作(可有可无,视情况而定)
return;
}
for (int i = "for循环开始的参数"; i < "for循环结束的参数"; i++) {
//一些逻辑操作(可有可无,视情况而定)
//做出选择
//递归
backtrack("新的参数");
//一些逻辑操作(可有可无,视情况而定)
//撤销选择
}
}
写法
①
[1,2,3] =[],[1]
⬆
②
[1,2,3] = [],[1],[2],[1,2]
⬆
③
[1,2,3] = [],[1],[2],[1,2],[3],[2,3],[1,3],[1,2,3]
⬆
class Solution {
public List<List<Integer>> subsets(int[] nums) {
//结果集合
List<List<Integer>> list = new ArrayList();
//回溯方法
backtrack(list,new ArrayList<>(),nums,0);
return list;
}
public void backtrack(List<List<Integer>>list,List<Integer>tempList,int []nums,int start){
list.add(new ArrayList<>(tempList));
for(int i = start;i<nums.length;i++) {
tempList.add(nums[i]);
backtrack(list, tempList, nums, i + 1);
tempList.remove(tempList.size() - 1);
}
}
}