Published on

[LeetCode 78] Subsets

Problem

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.

Thoughts

  • Draw a decision tree, we can find that for each number, we can either include it or not include it in the final results
  • We can use DFS and backtracking to implement above ideas

TypeScript

function subsets(nums: number[]): number[][] {
    let res: number[][] = [];
    
    let cur: number[] = [];
    const dfs = (i: number) => {
        if(i >= nums.length){
            res.push([...cur])
            return
        }
        
        // we add cur index value
        cur.push(nums[i])
        dfs(i + 1)
        
        // we dont add cur inde value
        cur.pop()
        dfs(i + 1)
    }
    
    dfs(0)
    return res;
};

Reference