less than 1 minute read

https://leetcode.com/problems/subsets/

문제 : 모든 부분집합을 리턴하라.

입력 : nums = [1, 2, 4] 출력 : [[], [1], [2], [4], [1,2], [1,4], [2,4], [1,2,4]]

  • 별도의 종료조건이 필요없다. (모든 탐색의 경로가 부분집합이 되므로)
import java.util.List;
import java.util.ArrayList;
import java.util.ArrayDeque;
class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        dfs(result, new ArrayDeque<>(), nums, 0);
        return result;
    }

    public void dfs(List<List<Integer>> result, ArrayDeque<Integer> temp, int[] nums, int idx) {
        
        result.add(new ArrayList<>(temp));
        for(int i=idx; i<nums.length; i++) {
            temp.add(nums[i]);
            dfs(result, temp, nums, i+1);
            temp.removeLast();
        }
    }
}