Here is the full solution:
function subsets(nums)
result := []
backtrack(nums, 0, [], result)
return result
function backtrack(nums, start, current, result)
add copy of current to result
for i from start to length of nums - 1
add nums[i] to current
backtrack(nums, i + 1, current, result)
remove last element from current
Time: to generate and copy all subsets. Space: for recursion depth.