回溯---子集

子集

78. Subsets (Medium)

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);
    }
}
}
posted @ 2019-07-01 15:06  yjxyy  阅读(196)  评论(0编辑  收藏  举报