DFS算法:
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums.sort()
res = []
self.gensubset(nums, 0, [], res)
return res
def gensubset(self, nums, start, cur, res):
res.append(cur)
for i in range(start, len(nums)):
self.gensubset(nums, i+1, cur+[nums[i]], res)
迭代法:
def subsets(self, nums):
res = [[]]
for num in sorted(nums):
res += [item+[num] for item in res]
return res
位操作算法:
在一个子集中,对于每一个元素都有两种可能,存在或不存在,因此总共有2**n个子集,然后依次产生这2**n个子集。
def subsets2(self, nums):
res = []
nums.sort()
for i in xrange(1<<len(nums)):
tmp = []
for j in xrange(len(nums)):
if i & 1 << j: # if i >> j & 1:
tmp.append(nums[j])
res.append(tmp)
return res