第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

LeetCode 77. 組合 | Python

標簽:
Python 算法

77. 组合


题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/combinations

题目


给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。

示例:

输入: n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

解题思路


思路:组合数

先审题,题目要求给定 n,返回 1…n 中所有可能的 k 个数组合。我们可以发现,这其实就是高中数学概念上的组合数问题。

组合的定义: 从 n 个不同元素中,任取 m(m≤nm \leq nmn)个不同元素组成一组,称为组合。

组合数的定义: 从 n 个不同元素中,任取 m(m≤nm \leq nmn)个不同元素的所有组合的个数,叫做组合数,记为 CnmC_{n}^{m}Cnm

组合数有这样一个性质:

Cn+1m=Cnm+Cnm−1C_{n+1}^{m} = C_{n}^{m} + C_{n}^{m-1}Cn+1m=Cnm+Cnm1

这里我们令 n’ = n+1,那么上面的式子则会变成:

Cn′m=Cn′−1m+Cn′−1m−1C_{n'}^{m} = C_{n'-1}^{m} + C_{n'-1}^{m-1}Cnm=Cn1m+Cn1m1

其实也就等同于:

Cnm=Cn−1m+Cn−1m−1C_{n}^{m} = C_{n-1}^{m} + C_{n-1}^{m-1}Cnm=Cn1m+Cn1m1

这里我们可以这样去理解上面的式子。假设现在从 n 个元素选 m 个元素,也就是 CnmC_{n}^{m}Cnm。这里,我们先选择一个需要特殊考虑的元素,那么就会有以下两种情况:

  • 当选取的元素中不含这个特殊元素,那么就需要在剩余的 n-1 个元素中选出 m 个元素,也就是 Cn−1mC_{n-1}^{m}Cn1m
  • 当选取的元素中含有这个特殊元素,那么就需要从剩余的 n-1 个元素中选出 m-1 个元素,也就是 Cn−1m−1C_{n-1}^{m-1}Cn1m1

最终,将两种情况结合起来,从 n 个元素选 m 个元素的情况。

那么就按照这个思路,进行实现,这里每次选取特殊元素为可选元素集合中最小的元素。

具体代码实现如下(递归方法)。

from typing import List

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        ans = []
        tmp = []

        def helper(special, n, k):
            # k 个元素选择完成,添加到返回列表中
            if k == 0:
	            # 这里注意添加的是副本
	            # 具体原因,建议自行调试查看
                ans.append(tmp[::])
                return
            # 表示剩余元素不够选择 k 个元素,直接返回
            if k > n:
                return

            tmp.append(special)
            helper(special+1, n-1, k-1)
            tmp.pop()
            helper(special+1, n-1, k)

        helper(1, n, k)

        return ans

# n = 4
# k = 2
# solution = Solution()
# ans = solution.combine(n, k)
# print(ans)
點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消