Description
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 1. 역추적(back tracking)
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for (int i = 1; i <= nums.length; i++) {
backTracking(result,new ArrayList<>(),nums, i, 0);
}
return result;
}
private void backTracking(List<List<Integer>> result, List<Integer> comb, int[] nums, int len, int start){
if(len == comb.size()){ // len : comb 자리수 기준 cur: 현재 담은 개수
result.add(new ArrayList<>(comb));
return;
}
for (int i = start; i < nums.length; i++) {
comb.add(nums[i]);
backTracking(result,comb, nums, len, i+1);
comb.remove(comb.size()-1);
}
}
재귀호출을 통해 마지막요소부터 역추적해서 요소를 채워나갑니다.
가능한 모든 경우의 수를 반환하는 문제이기 때문에 1개부터 nums의 length만큼 나올 수 있는 경우의수를 모두 반환 합니다.
Reference
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 226. Invert Binary Tree - 문제풀이 (0) | 2022.02.14 |
---|---|
[LeetCode] 101. Symmetric Tree - 문제풀이 (0) | 2022.02.14 |
[Leetcode] 104. Maximum Depth of Binary Tree - 문제풀이 (0) | 2022.02.11 |
[LeetCode] 560. Subarray Sum Equals K - 문제풀이 (0) | 2022.02.11 |
[LeetCode] 532. K-diff Pairs in an Array - 문제풀이 (0) | 2022.02.09 |