Time: 35 ms (80.56%), Space: 14.1 MB (33.36%) - LeetHub

This commit is contained in:
Deven
2023-01-19 15:11:54 -05:00
parent 7acafbd276
commit 2cb7abc616
+29
View File
@@ -0,0 +1,29 @@
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
# All subsets can be mapped to a binary number where
# - the number is the same length as the list
# - a 1 represents the number being in the list, 0 otherwise
# Example: nums = [1,2,3]
# subsetBinary = 0 = 0b000 -> []
# = 3 = 0b011 -> [2, 3]
# (2 ** 3) - 1 = 7 = 0b111 -> [1, 2, 3]
import math
powerSet = []
for subsetBinary in range(2 ** len(nums)):
subset = []
# Iterates exactly n times (where n is the number of 1s in the binary string)
while subsetBinary > 0:
indexOfFirst1 = -(math.floor(math.log2(subsetBinary)) + 1)
subset.append(nums[indexOfFirst1])
subsetBinary -= 2 ** (-indexOfFirst1 - 1)
powerSet.append(subset)
return powerSet