78.Subsets leetcode java

来源:互联网 发布:网络超时请检查防火墙 编辑:程序博客网 时间:2024/05/21 09:59

题目:

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]
给定一个不重复整数的集合,返回所有可能的子集,解集不能包含重复的子集

思路:

看到all possible subsets是典型的DFS,套用排列组合模板

class Solution {    public List<List<Integer>> subsets(int[] nums) {        List<List<Integer>> res = new ArrayList<List<Integer>>();        List<Integer> subset = new ArrayList<Integer>();        if(nums.length==0){            return res;        }        Arrays.sort(nums);        helper(subset,nums,0,res);        return res;    }    public void helper(List<Integer> subset,int[] nums,int pos,List<List<Integer>> res){//找到所有以subset开头的所有子集        res.add(new ArrayList<Integer>(subset));//因为java传的是引用,如果直接把subsetadd进去,之后subset变化后add进去的对象也会发生变化,这里相当于拍个快照add进去        for(int i=pos;i<nums.length;i++){            subset.add(nums[i]);            helper(subset,nums,i+1,res);            subset.remove(subset.size()-1);        }    }}


原创粉丝点击