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

What to do when a macOS update goes wrong

Anything can happen, but so long as you have a recent backup you should be able fix the problems and get back up and running again. Here's how.

via The Eclectic Light Company

no two things the same

Tony Feher, Come Out and Play Stephen Jay (detail), 2013

via bookbear express

Microsoft Plugs Nearly 400 Security Holes

Microsoft today released updates to remedy at least 398 security vulnerabilities in its Windows operating systems and supported software, including one weakness that is already being actively exploited and two others that were publicly detailed prior to today.

via Krebs on Security