給定兩個整數 n 和 k,返回范圍 [1, n] 中所有可能的 k 個數的組合。
你可以按 任何順序 返回答案。
示例 1:
輸入:n = 4, k = 2
輸出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
示例 2:
輸入:n = 1, k = 1
輸出:[[1]]
(1)方法一
采用Python內置的 排列組合方法 from itertools import combinations
(2)方法二
遞歸: #在 [1, n] 中選 k 個數,那麼按照字典序可以在 [1, n - k +1]中依次選一個數x ,然後在 [x + 1, n] 中選出 (k - 1) 個數,通過遞歸進行搜索即可。
(1)方法一
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
from itertools import combinations
return [list(i) for i in combinations(iterable=range(1,n+1),r=k)]
(2)方法二
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
# 在 [1, n] 中選 k 個數
# 那麼按照字典序可以在 [1, n - k +1]中選一個數x
# 然後在 [x + 1, n] 中選出 (k - 1) 個數,通過遞歸進行搜索即可。
def merge(array,k):
if k==1:
return [[i] for i in array]
else:
ans = []
for i in range(len(array)-k+1):
last = merge(array[i+1:],k-1)
for j in last:
ans.append([array[i]]+j)
return ans
return merge(list(range(1, n+1)), k)