Leetcode 77.组合
1 题目描述(Leetcode题目链接)
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
2 题解
本题是比较明显的回溯问题,递归就可以比较好地解决。
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
retv = []
def backtrack(i, stack):
if len(stack) == k:
retv.append(stack)
return
for j in range(i, n + 1):
backtrack(j + 1, stack + [j])
backtrack(1, [])
return retv
不过这么写貌似效率并不高,提交通过的速度也慢,下面是一个排名靠前的解法,也是递归
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
if not k:return[[]]
if n == k:return [[i + 1 for i in range(0, k)]]
else:return self.combine(n - 1, k) + [x + [n] for x in self.combine(n - 1, k - 1)]