求子集

利用递归的方法求子集

每层递归是不同的排列组合,因为前面的数已经排列组合过了,每次只需要从下一个数开始组合即可

class Solution {

    public List> subsets(int[] nums) {

        List> ret = new ArrayList<>();

        if (nums == null) {

              return ret;

          }

        Arrays.sort(nums);

        dfs(nums, 0, new ArrayList (), ret);       

        return ret;

    }

    public void dfs(int[] S, int index, List path, List> ret) {

        ret.add(new ArrayList(path));     

        for (int i = index; i < S.length; i++) {

            path.add(S[i]);

            dfs(S, i + 1, path, ret);

            path.remove(path.size() - 1);

        }

    }

}

你可能感兴趣的:(求子集)