例题1:
这个问题,标准做法是用回溯算法。但是我最近发现了一个简单的技巧,因此在这里记录一下。
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
res = [[],]
for i in range(1,len(nums)+1):
for tup in itertools.combinations(nums, i):
#combinations的作用是返回nums中所有长度为i的子序列
#如果允许生成的答案中有重复元素,如[1,1],则可以使用combination_with_replace(nums,i)函数
res.append(list(tup))
return res
例题2
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
length=len(nums)
res=[]
for path in permutations(nums,length):
#返回nums中任意取length个元素做排列的元组的迭代器
res.append(list(path))
return res
记住,由itertools返回的都是元组,需要再次转换成列表后加入到答案中去。