[Algorithm] 九章一:算法面试与代码风格

来源:互联网 发布:武藏s300点编程 编辑:程序博客网 时间:2024/06/07 01:41

Given a set of distinct integers, return all possible subsets.

  • Elements in a subset must be in non-descending order.
  • The solution set must not contain duplicate subsets.
Example

If S = [1,2,3], a solution is:

[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]
Challenge :Can you do it in both recursively and iteratively?
思路:dfs
public class Solution {    public List<List<Integer>> subsets(int[] nums) {        List<List<Integer>> results=new ArrayList<>();        if(nums==null){            return results;        }                if(nums.length==0){            results.add(new ArrayList<Integer>());            return results;        }        Arrays.sort(nums);        helper(new ArrayList<Integer>(),nums,0,results);        return results;    }        private void helper(ArrayList<Integer> subset,int [] nums,int startIndex,List<List<Integer>> results){        results.add(new ArrayList<>(subset));         for(int i=startIndex;i<nums.length;i++){                  subset.add(nums[i]);                  //例如[]->[1]            helper(subset,nums,i+1,results);      //寻找所有以1开头的子集,并加入到results里,再同样做子任务            subset.remove(subset.size()-1);        }    }}


0 0
原创粉丝点击