给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
回溯法
class Solution:
def combine(self, n, k):
res = []
nums = list(range(1,n+1))
def backtrack(i,tmp):
if len(tmp) == k:
if len(set(tmp)) != k:
return
res.append(tmp)
return
for j in range(i, n):
backtrack(j,tmp+[nums[j]])
backtrack(0,[])
return res
s = Solution()
res = s.combine(3,3)
print(res)
一开始写成这样,超时了,以为回溯不行。但是我看了一下评论,别人也是回溯法通过了。加了‘剪枝’就好了。
class Solution:
def combine(self, n, k):
res = []
nums = list(range(1,n+1))
def backtrack(i,tmp):
if len(tmp) == k:
if len(set(tmp)) != k:
return
res.append(tmp)
return
for j in range(i, n):
backtrack(j+1,tmp+[nums[j]])#因为是不能重复数字的
backtrack(0,[])
return res
s = Solution()
res = s.combine(3,3)
print(res)