--- title: '78. Subsets' description: Given an integer array nums of unique elements, return all possible subsets (the power set) icon: dot topics: - { name: "Array", slug: "array" } - { name: "Backtracking", slug: "backtracking" } - { name: "Bit Manipulation", slug: "bit-manipulation" } issue: "https://github.com/prdlk/leetcode/issues/149" companies: - { name: "Bloomberg", period: "Thirty Days", frequency: 69.8 } - { name: "Amazon", period: "Thirty Days", frequency: 61.3 } - { name: "Agoda", period: "Three Months", frequency: 75.3 } - { name: "Microsoft", period: "Three Months", frequency: 48.3 } - { name: "Meta", period: "Three Months", frequency: 43.3 } - { name: "Google", period: "Three Months", frequency: 23.9 } - { name: "TikTok", period: "Six Months", frequency: 64.9 } sidebar: label: 'Subsets' badge: 'Medium' --- ### 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 ```py class Solution: def subsets(self, nums: list[int]) -> list[list[int]]: res = [] def backtrack(i, path): res.append(path[:]) for num_idx in range(i, len(nums)): path.append(nums[num_idx]) backtrack(num_idx + 1, path) path.pop() backtrack(0, []) return res ```