LeetCode는 프로그래밍 문제를 풀며 코딩 실력을 향상할 수 있는 온라인 플랫폼입니다. 다양한 알고리즘 및 데이터 구조 문제를 제공하며, 면접 대비에 유용합니다. 해당 문제는, LeetCode Problems에서 볼 수 있는 난이도 '중간 (Medium)' 단계인 "Subsets" 문제입니다.
--> https://leetcode.com/problems/subsets/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.
주어진 정수 배열 nums의 모든 부분 집합(멱집합)을 반환하는 문제입니다. 중복되는 부분 집합은 없어야 하며, 결과는 순서에 상관없이 반환될 수 있습니다. 예를 들어, 입력이 [1,2,3]인 경우, 가능한 모든 부분 집합을 반환해야 합니다.
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
int n = nums.length;
int subsetL = (int) Math.pow(2, n);
for (int i = 0; i < subsetL; i++) {
List<Integer> temp = new ArrayList<>();
for (int j = 0; j < n; j++) {
if (((i >> j) & 1) == 1) {
temp.add(nums[j]);
}
}
res.add(temp);
}
return res;
}
}
위 코드는 비트마스킹을 사용해봤습니다. 이 방식을 수업시간에 빠르게 배웠었던 기억이 났는데요. Power set 인가? 그런 거였는데... 정확한 명칭은 기억이 안 나는 점 양해해 주십시오... 궁금하시다면 제가 다시 한번 찾아보겠습니다. 댓글로 말해주세요! 이제 코드를 설명해 보겠습니다 :
- 부분 집합의 수 계산 :
- 주어진 배열 nums의 길이 n에 대해 가능한 모든 부분 집합의 수는 2n2^n입니다.
- 비트 마스킹을 사용하여 부분 집합 생성 :
- i는 0부터 2n−12^n - 1까지의 숫자를 나타내며, 각 숫자는 이진수로 부분 집합을 나타냅니다.
- j는 배열 nums의 인덱스를 나타내며, i의 j번째 비트가 1인지 확인합니다.
- j번째 비트가 1이면 nums[j]를 현재 부분 집합 temp에 추가합니다.
- temp를 결과 리스트 res에 추가합니다.
시간 및 공간 복잡도 :
- 시간 복잡도 :
- 각 숫자 i에 대해 n개의 비트를 확인하므로, 시간 복잡도는 O(n * 2^n)입니다.
- 여기서 n은 배열 nums의 길이이고, 2^n은 가능한 모든 부분 집합의 수입니다.
- 공간 복잡도 :
- 결과 리스트 res에는 모든 부분 집합이 저장되므로, 공간 복잡도는 O(n * 2^n)입니다.
- 여기서 n은 각 부분 집합의 최대 길이이고, 2^n은 가능한 모든 부분 집합의 수입니다.
'LeetCode' 카테고리의 다른 글
[LeetCode] - 13. Roman to Integer (0) | 2024.07.25 |
---|---|
[LeetCode] - 14. Common Prefix (0) | 2024.07.25 |
[LeetCode] - 73. Set Matrix Zeroes (0) | 2024.07.25 |
[LeetCode] - 17. Letter Combinations of a Phone Number (6) | 2024.07.24 |
[LeetCode] - 3120. Count the Number of Special Characters (2) | 2024.07.24 |