반응형
난이도 - Medium
Intuition
1) Cascading
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
ans = [[]]
for num in nums:
newSubsets = []
for curr in ans:
temp = curr.copy()
temp.append(num)
newSubsets.append(temp)
for curr in newSubsets:
ans.append(curr)
return ans
Time Complexity: O(N * 2^N)
Space Complexity: O(N * 2^N)
2) Backtracking
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
ans = []
def backtrack(cur_sub, idx):
ans.append(cur_sub[:])
for i in range(idx, len(nums)):
cur_sub.append(nums[i])
backtrack(cur_sub, i + 1)
cur_sub.pop()
backtrack([], 0)
return ans
Time Complexity: O(N * 2^N)
Space Complexity: O(N)
3) Lexicographic (Binary Sorted) Subsets
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
n = len(nums)
ans = []
for i in range(2**n, 2**(n+1)):
# e.g. i = 8 -> bin(i) = 0b1000 -> bin(i)[3:] = 000
bitmask = bin(i)[3:]
ans.append([nums[j] for j in range(n) if bitmask[j] == "1"])
return ans
Time Complexity: O(N * 2^N)
Space Complexity: O(N)
반응형
'코딩 알고리즘 문제 > Leetcode' 카테고리의 다른 글
| 419. Battleships in a Board (Array, Depth-First Search, Matrix) (0) | 2025.10.23 |
|---|---|
| 875. Koko Eating Bananas (Array, Binary Search) (0) | 2025.10.23 |
| 4. Median of Two Sorted Arrays (Array, Binary Search, Divide and Conquer) (0) | 2025.10.23 |
| 3. Longest Substring Without Repeating Characters (Hash Table, String, Sliding Window) (0) | 2025.10.23 |
| 824. Goat Latin (String) (0) | 2025.10.23 |