可以使用遞歸的方法來輸出數組的所有子集。具體的實現如下:
def subsets(nums):
res = []
backtrack(nums, [], res, 0)
return res
def backtrack(nums, subset, res, start):
res.append(subset[:]) # 將當前子集加入結果列表
for i in range(start, len(nums)):
subset.append(nums[i]) # 添加當前元素到子集中
backtrack(nums, subset, res, i+1) # 遞歸調用下一層,start參數為i+1,表示下一個位置從i+1開始
subset.pop() # 回溯,將添加的元素移除
# 測試
nums = [1, 2, 3]
print(subsets(nums))
輸出結果為:
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]
這里使用了回溯法,通過維護一個當前子集的列表subset,并在每次遞歸調用之前將當前子集加入結果列表res中。然后通過遍歷數組中的每個元素,在每個元素的位置上繼續遞歸調用,直到遍歷完整個數組。在遞歸調用的過程中,通過增加一個start參數來控制下一次遞歸的起始位置,從而避免生成重復的子集。