Leetcode Tag Search | Back

78. Subsets

Category: /leetcode

Leetcode Link | Backtrack template

Given an integer array nums of unique elements, return all possible subsets (the power set).

The solution set must not contain duplicate subsets. Return the solution in any order.

Example 1:

Input: nums = [1,2,3]
Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
Example 2:

Input: nums = [0]
Output: [[],[0]]
 

Constraints:

1 <= nums.length <= 10
-10 <= nums[i] <= 10
All the numbers of nums are unique.

Solution

  • Backtrack 模板解法 T: O(2^N), S: O(N)
def subsets(nums):
  res = []
  track = []
  backtrack(nums, 0, track)
  return res


def backtrack(nums, start, track):
  res.append(track)

  for i in range(start, len(nums)):
    track.append(nums[i])  # make choice
    backtrack(nums, i+1, track)
    track.pop()  # undo choice

run simulation: 
res: 
[[]]
[[], [1]]
[[], [1], [1, 2]], 
[[], [1], [1, 2], [1, 2, 3]]
[[], [1], [1, 2], [1, 2, 3], [1, 3]]
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2]]
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3]]
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]
  • Recursive is easier to understand, but Time complexity is worse: T: O(N*2^N), S: O(N)

Idea: A + [[nums[i] + A[i] for i in range(len[A])]

讨论

提示

  • 如果看不到讨论部分, 请暂时关掉adblock in Firefox/Chrome
  • 本网站使用Javascript实现评论功能, 此处外链对提高您的网站PR没有帮助. (潜台词: 请不要灌水, 谢谢)