给定一组不同的整数, 返回所有可能的子集
解法1
def Subset(nums):
result = [[]]
for num in nums:
for element in result[:]:
x = element[:]
x.append(num)
result.append(x)
return result
if __name__ == '__main__':
nums = [1, 2, 3]
print(Subset(nums))
运行结果
[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
解法2(使用回朔法)
def subsets_recursive(nums):
lst = []
result = []
subsets_recursive_helper(nums, lst, result, 0)
return result
def subsets_recursive_helper(nums, lst, result, pos):
result.append(lst[:])
for i in range(pos, len(nums)):
lst.append(nums[i])
subsets_recursive_helper(nums, lst, result, i + 1)
lst.pop()
if __name__ == '__main__':
nums = [1, 2, 3]
print(subsets_recursive(nums))
运行结果
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]