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.

Solution

Time: 2^n

Space: n

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        var ans = new ArrayList<List<Integer>>();
        solve(nums, 0, List.of(), ans);
        return ans;
    }

    public void solve(int[] nums, int n, List<Integer> curr, List<List<Integer>> ans) {
        if (n == nums.length) {
            ans.add(curr);
            return;
        }
        // we have the choice of adding or not

        // don't add
        solve(nums, n + 1, curr, ans);

        // add
        var copy = new ArrayList<>(curr);
        copy.add(nums[n]);
        solve(nums, n + 1, copy, ans);
    }
}

Recent posts from blogs that I like

Paintings of gales 2

Paintings by Millet, Winslow Homer, Monet, Caillebotte, Christian Krogh, Granville Redmond, Franz von Stuck and others.

via The Eclectic Light Company

Notes on the complex roots of unity

One of the most wonderful aspects of math is how deep we can get by studying seemingly trivial questions. Consider the roots of unity, where "unity" simply means the number 1. Basics: roots of unity for real numbers Studying the roots of unity usually begins in middle school: what is the square root...

via Eli Bendersky

Writing is no longer proof of work

Tech companies structurally depend on writing to serve as evidence, in the same way that Bitcoin depends on proof-of-work hashing. However, in the last few years, LLMs have started to undermine this practice.

How can writing be like proof-of-work? When I’m writing something at work, it’s not always ...

via Sean Goedecke