combinations
https://leetcode.com/problems/combinations/description/
给n,k,输出1~n之间的所有k组合。
思路:回溯。构建一个1~n的有序数组,每次递归处理下一位,保证不重复。
class Solution:
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
self.res = [] #全局结果。写在函数外部会被修改,不知道为何
nums = [i for i in range(1, n + 1)]
tmpList = []
self.backtrack(nums, tmpList, k, 0)
return self.res
def backtrack(self, nums, tmpList, k, start): #从start开始
if len(tmpList) == k:
self.res.APPend(list(tmpList)) #复制一份,写入res
else:
for i in range(start, len(nums)):
tmpList.append(nums[i])
self.backtrack(nums, tmpList, k, i + 1) #递归,从i后一位开始
tmpList.pop()
相关阅读
itertools.combinations()结构及上下文||组合
itertools 官方文档 itertools是2.3版本加入的用于创建循环用迭代器的函数模块。itertools 模块提供的迭代器函数有以下几种类