欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法系列——Subsets

程序员文章站 2024-03-16 13:34:34
...

题目描述

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

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],
  []
]

解题思路

递归回溯法,比如[1,2,3],第一次抽出1,然后在1的基础上加2,再加3。加完之后再往回返,去掉3,再去掉2,发现可以加3,形成[1,3],再到2,以此类推。

程序实现

public class Solution {
    private List<List<Integer>> result=new ArrayList<List<Integer>>();
    public List<List<Integer>> subsets(int[] nums) {
        if(nums==null||nums.length==0)
            return result;
        Arrays.sort(nums);
        //加入空集合
        result.add(new ArrayList<Integer>());
        List<Integer> path=new ArrayList<Integer>();
        generate(nums,0,path);
        return result;
    }

    private void generate(int[] nums,int start, List<Integer> path){
        if(start==nums.length)
            return;
        for(int i=start;i<nums.length;i++){
            path.add(nums[i]);
            result.add(new ArrayList<Integer>(path));
            generate(nums,i+1,path);
            path.remove(path.size()-1);
        }
    }


}
相关标签: 算法