回溯---子集
子集
Input: nums = [1,2,3]
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
题目描述:
给定一个集合,返回其所有的不重复子集。
思路分析:
求子集,求排列问题,一般使用回溯的思想解决。
代码:
public class Solution{
public List<List<Integer>>subsets(int []nums){
List<List<Integer>>res=new ArrayList<>();
List<Integer>list=new ArrayList<>();
if(nums==null||nums.length==0)
return res;
for(int size=0;size<=nums.length;size++){
backtracking(0,size,nums,res,list);//子集的长度
}
return res;
}
public void backtracking(int start,int size,int[]nums,List<List<Integer>>res,List<Integer>list){
if(list.size()==size){
res.add(new ArrayList<>(list));
return;
}
for(int i=start;i<nums.length;i++){
list.add(nums[i]);
backtracking(i+1,size,nums,res,list);
list.remove(list.size()-1);
}
}
}