78. Subsets
# Medium

class Solution {
List<List<Integer>> res = new ArrayList<List<Integer>>();
public List<List<Integer>> subsets(int[] nums) {
ArrayList<Integer> level = new ArrayList<Integer>();
helper(nums, 0, level);
return res;
}
public void helper(int[] nums, int i, ArrayList<Integer> level) {
res.add(new ArrayList(level)); // copy level to res
if(i == nums.length) return;
for(int j = i; j < nums.length; j ++) {
level.add(nums[j]);
helper(nums, j + 1, level);
level.remove(level.size() - 1);
}
}
}class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
# edge case
result = []
result.append([])
if len(nums) == 0:
return result
# regular case
sub = []
self.helper(nums, sub, result, 0)
return result
# index is the next available element's index
def helper(self, nums, sub, result, index):
# stop condition
if index == len(nums):
return
for i in range(index, len(nums)):
sub.append(nums[i])
result.append(sub[:])
self.helper(nums, sub, result, i+1)
sub.pop()Last updated