Leetcode刷题Python77. 组合

Posted Better Bench

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题Python77. 组合相关的知识,希望对你有一定的参考价值。

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)

以上是关于Leetcode刷题Python77. 组合的主要内容,如果未能解决你的问题,请参考以下文章

Python描述 LeetCode 77. 组合

Python描述 LeetCode 77. 组合

java刷题--77 组合

Leetcode刷题Python40. 组合总和 II

Leetcode刷题Python216. 组合总和 III

LeetCode刷题模版:71 - 80