Subset

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

Note:

  • Elements in a subset must be in non-descending order.

  • The solution set must not contain duplicate subsets.

  • Also, the subsets should be sorted in ascending ( lexicographic ) order.

  • The list is not necessarily sorted.

Example :

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

[
  [],
  [1],
  [1, 2],
  [1, 2, 3],
  [1, 3],
  [2],
  [2, 3],
  [3],
]
class Solution {
    public ArrayList<ArrayList<Integer>> subsets(ArrayList<Integer> nums) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        Collections.sort(nums);
        backtrack(list, new ArrayList<>(), nums, 0);
        return list;
    }

    private void backtrack(ArrayList<ArrayList<Integer>> list, List<Integer> tempList, ArrayList<Integer> nums,
            int start) {
        list.add(new ArrayList<>(tempList));
        for (int i = start; i < nums.size(); i++) {
            tempList.add(nums.get(i));
            backtrack(list, tempList, nums, i + 1);
            tempList.remove(tempList.size() - 1);
        }
    }
}

Last updated