# Solution 1 - Recursive # O(n*2^n) time | O(n*2^n) space def power_set(array, index = None): if index is None: index = len(array) - 1 if index < 0: return [[]] ele = array[index] subset = power_set(array, index - 1) for i in range(len(subset)): current_subset = subset[i] subset.append(current_subset + [ele]) return subset # Solution 2 - Iterative # O(n*2^n) time | O(n*2^n) space def power_set(array): subsets = [[]] for ele in array: for i in range(len(subsets)): current_subset = subsets[i] subsets.append(current_subset + [ele]) return subsets