77.组合 python

部署运行你感兴趣的模型镜像

题目

题目描述

给定两个整数 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 <= n <= 20
1 <= k <= n

题解

这个问题可以通过回溯算法(Backtracking)来解决。回溯是一种递归算法,它尝试构建所有的解,并在发现当前路径不能形成一个完整的解时撤销选择(即回溯)。对于组合问题,回溯法非常适合,因为它允许我们探索所有可能的选项。

为了生成从 1 到 n 的所有 k 数字组合,我们可以按照以下步骤操作:

  1. 创建一个辅助函数 backtrack,它接受当前起始数字、当前组合和结果列表作为参数。
  2. 如果当前组合的长度等于 k,则将当前组合添加到结果列表中并返回。
  3. 否则,迭代从起始数字到 n 的所有数字,对每个数字:
    • 将其添加到当前组合中。
    • 调用 backtrack 函数,将下一个数字作为新的起始数字。
    • 撤销选择(移除最后添加的数字),以尝试其他可能性。
  4. 初始化结果列表并调用辅助函数开始回溯过程。
  5. 返回结果列表。

下面是 Python 实现代码:

def combine(n: int, k: int):
    def backtrack(start=1, current=[]):
        # 如果当前组合的长度等于k,添加到结果中
        if len(current) == k:
            result.append(current[:])  # 使用[:]创建current的副本
            return
        
        for i in range(start, n + 1):
            current.append(i)          # 做出选择
            backtrack(i + 1, current)  # 进入下一层决策树
            current.pop()              # 撤销选择

    result = []
    backtrack()
    return result

这段代码实现了上述的回溯算法,用来生成所有可能的 k 个数的组合。combine 函数是主函数,而 backtrack 是内部定义的辅助函数,用于执行实际的回溯逻辑。当 backtrack 找到一个完整的组合时,它会将其复制并添加到最终的结果列表 result 中。这样做是为了避免由于后续修改 current 列表而导致结果被改变的问题。

提交结果

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值