class Solution { public List> subsets(int[] nums) { List> result = new ArrayList<>(); List temp = new ArrayList<>(); findAllSubsets(nums, 0, result, temp); return result; } public void findAllSubsets(int[] nums, int index, List> result, List temp) { // base condition if(index == nums.length) { result.add(new ArrayList<>(temp)); return; } // Pick the current element into subset temp.add(nums[index]); findAllSubsets(nums, index+1, result, temp); // do not pick the current element into subset temp.remove(temp.size()-1); findAllSubsets(nums, index+1, result, temp); return; } }