程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Leetcode刷題Python】77. 組合

編輯:Python

1 題目

給定兩個整數 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]]

2 解析

(1)方法一
采用Python內置的 排列組合方法 from itertools import combinations

(2)方法二
遞歸: #在 [1, n] 中選 k 個數,那麼按照字典序可以在 [1, n - k +1]中依次選一個數x ,然後在 [x + 1, n] 中選出 (k - 1) 個數,通過遞歸進行搜索即可。

3 Python實現

(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)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved