[leetcode]77_组合_给定数字范围且输出无重复

news/2024/9/28 17:18:49 标签: leetcode, 算法, 职场和发展
给定两个整数 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

解题思路:【回溯】

回溯三部曲:
    1、确认递归函数返回值与参数:n,k,结果数组res,子集合path,子集合首元素起始位置startindex。
    2、回溯函数终止条件:找到长度为k的子集合。
    3、单层搜索过程:
        循环遍历[startindex, n + 1 - (k - len(path)) + 1]的每个元素i
        ——包含剪枝操作:
                从startindex开始,确保可以满足子集合还需要的元素数目k - len(path);
                不满足,则结束循环遍历(不进行遍历)。
        path.append(i),再递归遍历子集合下一元素startindex + 1;
        若子集合的遍历终止,则回溯path.pop(),遍历下一个元素i + 1。

class Solution:
    def combination(self, n, k, startindex, res, path=[]):
        length = len(path)
        if length == k:
            #   此处必须采用这种形式,表示将path中的元素添加到res中;
            #   若采用res.append(path),表示将path引用添加到res中
            res.append(path[:])
            #   回溯,寻找下一组
            return
        #   循环遍历元素,并剪枝
        for i in range(startindex, n + 1 - (k - length) + 1):
            path.append(i)
            self.combination(n, k, i + 1, res, path)
            #   回溯
            path.pop()

if __name__ == '__main__':
    try:
        n, k = map(int, input().split())
        res = []
        solution = Solution()
        solution.combination(n, k, 1, res)
        print(res)
    except Exception as e:
        print(e)

仅作为代码记录,方便自学自查自纠


http://www.niftyadmin.cn/n/5681540.html

相关文章

无人机专业实操重要性凸显,组装、调试、改装技术详解

无人机专业的实操性在当今技术飞速发展的背景下显得尤为重要&#xff0c;这不仅体现在无人机的日常应用上&#xff0c;还贯穿于无人机的组装、调试及改装等关键环节中。以下是对这些技术环节的详细解析&#xff1a; 一、无人机组装技术 无人机的组装是无人机技术的基础&#x…

基于SSM+微信小程序的校园二手数码交易平台系统(二手3)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于ssm微信小程序的校园二手数码交易平台满足了不同用户的功能需求&#xff0c;包括用户、卖家以及管理员&#xff0c;下面对这不同用户的功能需求进行简介。 &#xff08;1&#xff09…

从零开始手写STL库:Stack

从零开始手写STL库–Stack的实现 Gihub链接&#xff1a;miniSTL 文章目录 从零开始手写STL库–Stack的实现一、stack是什么&#xff1f;二、stack要包含什么函数总结 一、stack是什么&#xff1f; 栈是一种后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09…

Acwing 约数

1.试除法 思路分析&#xff1a;利用试除法求一个数的所有约数&#xff0c;思路和判断和求质数的判定类似 一个数N有一个约数d&#xff0c;那么N/d也必然是其约数 约数都是成对出现的&#xff0c;只需要枚举1到 n \sqrt{n} n ​即可&#xff0c;注意不要让一个约数加入两次! …

Redis 五大基本数据类型及其应用场景进阶(缓存预热、雪崩 、穿透 、击穿)

Redis 数据类型及其应用场景 Redis 是什么? Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库&#xff0c;基于Key/Value结构存储数据&#xff0c;通常用来 缓解高并发场景下对某一资源的频繁请求 &#xff0c;减轻数据库的压力。它支持多种数据类型,如字符串、…

STM32 map 文件浅析

目录 一、概述二、Section Cross References三、Removing Unused input sections from the image四、Memory Map of the image1、Local Symbols2、全局符号&#xff08;Global Symbols&#xff09; 五、Image Symbol Table六、Image component sizes 一、概述 .map 文件是编译…

Netty--第三章

Netty 进阶 1. 粘包与半包 1.1 粘包现象 服务端代码 public class HelloWorldServer { static final Logger log LoggerFactory.getLogger(HelloWorldServer.class); void start() { NioEventLoopGroup boss new NioEventLoopGroup(1); NioEventLoopGroup worker new Nio…

封装左侧抽屉可拖拽组件【可多个】

一、案例效果 二、案例代码 封装抽屉组件 <template><div class"drag-drawer"><div class"out-box" :style"style"><mtd-tooltip:content"collapse ? 展开面板 : 收起面板"class"tool-tip":placeme…