1、题目
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
2、解答
这道题其实比较好想到的就是使用递归。
- 递归:遍历[begin,n],每次插入一个数,初始状态begin是1,然后求[begin+1, n]中长度为k-1的数组。递归跳出的逻辑是递归链得到的数组长度等于K。
import copy
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
res = []
self.back_trace(n, k, res, 1, [])
return res
def back_trace(self, n, k, res, begin, trace_list):
"""
递归法
:param n:
:param k:
:param res:
:param begin:
:param trace_list:
:return:
"""
if len(trace_list) == k:
res.append(copy.deepcopy(trace_list))
for i in range(begin, n+1):
trace_list.append(i)
begin += 1
self.back_trace(n, k, res, begin, trace_list)
trace_list.pop()