給定一個由不同數字組成的集合,羅列出該集合的所有子集。
注意點:
子集要包括空集合和該集合自己 每個子集中的元素要按照不降序的順序排列 結果集沒有順序要求例子:
輸入: nums = [1,2,3]
輸出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
與 Combinations 是一類題目,都可以用遞歸來解決。遞歸是倒過來解決問題,要求n的情況,就要先求n-1。在這裡嘗試順序的來解決,通過不斷迭代的方法來求所有的子集。現在舉個例子,集合[1]有[[],[1]]兩個子集,當向其中添加一個元素時,[1,2]有[[],[1],[2],[1,2]]四個子集,可以看出來,在新添加一個元素的時候,是在原來子集的基礎上,添加原子集中所有元素加上新元素的總集合。為了每個子集中的元素都是不降序的,要先把所有元素都排序。
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = [[]]
for num in sorted(nums):
result += [item + [num] for item in result]
return result
if __name__ == "__main__":
assert Solution().subsets([1, 2, 3]) == [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]