代码随想录算法训练营第21天—回溯算法01 | ● 理论基础 ● *77. 组合

news2024/11/15 4:33:21

理论基础

  • 回溯是一种纯暴力搜索的方法,它和递归相辅相成,通常是执行完递归之后紧接着执行回溯
  • 相较于以往使用的for循环暴力搜索,回溯能解决更为复杂的问题,如以下的应用场景
  • 应用场景
    • 组合问题
      • 如一个集合{1,2,3,4},找出长度为2的组合
    • 排列问题
      • 相较于组合,排列是有顺序的,如{1,2}只有一种组合,但是有两种排列
    • 切割问题
      • 给一个字符串,给一个要求,求得怎么切割满足要求
    • 子集问题
      • 给一个集合,求它的子集
    • 棋盘问题
      • 如N皇后和解数独等
  • 回溯法的思维结构——树型结构
    • 宽度代表集合的大小
    • 深度代表递归的深度
    • 回溯法思维结构
# 回溯编程模板
def backtracking(形参): # 返回值通常为空
    if (终止条件):
        存放结果
        return
        
    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)):
        处理节点
        backtracking(路径,选择列表) # 递归
        回溯,撤销处理结果

*77. 组合

题目链接/文章讲解:https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html
视频讲解:https://www.bilibili.com/video/BV1ti4y1L7cv
剪枝操作:https://www.bilibili.com/video/BV1wi4y157er

  • 考点
    • 回溯
  • 我的思路
    • 思路不到位
  • 视频讲解关键点总结
    • 回溯(递归)三要素
      • 形参:当前值,上限值,组合大小,单个组合变量,总组合结果变量;返回值为空
      • 退出条件:单个组合变量的大小等于组合大小,此时将单个组合变量加入总组合结果变量,并返回
      • 回溯逻辑
        • 不断地在范围内循环递归求取单个组合变量
        • 循环范围为当前值到上限值,每轮循环里:
          • 将当前值加入单个组合变量
          • 将当前值+1并递归
          • 执行回溯,即把单个组合变量里的最后一个值弹出,之后继续下一轮循环
      • 剪枝优化
        • 回溯题常常可以在循环范围上做优化
        • 本题可以把循环上限设置为上限值-(目标组合大小-当前组合大小)+2,+2是因为range函数在遍历时不包括右边界,所以要留出空余
  • 我的思路的问题
    • 无思路
  • 代码书写问题
    • 当想result变量添加单个组合变量时,要利用切片操作创建一个单个组合变量的副本并将该副本加入result,这是因为直接加入将仅仅把引用传入到result里,后续的改动将导致result里的同步改动
  • 可执行代码
class Solution:
    def backtracking(self, cur, n, k, single_set, result):
        if len(single_set) == k:
            result.append(single_set[:])
            return
        for i in range(cur, n - (k - len(single_set)) + 2):
            single_set.append(i)
            self.backtracking(i + 1, n, k, single_set, result)
            single_set.pop()
    def combine(self, n: int, k: int) -> List[List[int]]:
        result = []
        self.backtracking(1, n, k, [], result)
        return result

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1463996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【讨论】Web端测试和App端测试的不同,如何说得更有新意?

Web 端测试和 App 端测试是针对不同平台的上的应用进行测试,Web应用和App端的应用实现方式不同,测试时的侧重点也不一样。 Web端应用和App端应用的区别: 平台兼容性 安装方式 功能和性能 用户体验 更新和维护 测试侧重点有何不同 平台…

springboot208基于springboot物流管理系统

基于spring boot物流管理系统设计与实现 摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。…

想高薪就业鸿蒙HarmonyOS 开发岗位,到底该学习些啥?

鸿蒙是什么? 经过十多年的发展,传统移动互联网的增长红利已渐见顶。万物互联时代正在开启,应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年,全球物联网终端连接数量将达 246 亿个,其中消费物…

redis源码阶段性完成

这个真的是耗费我很长的时间 一个是太忙了,一个是内容确实太多了 断断续续的,终于基本完成了,但也只限于基本哈 在这期间也阅读了相关书籍 其实书籍讲的都很好,讲了大体思路 但是,到具体实现细节就复杂的多了 因…

【2024 R1 版本更新】Ansys Speos

上期我们讲到了Ansys系列的三大光学软件于2024年的更新,在小宇快马加鞭的信息收集下,更加具体的内容也整理完毕了,一起来看看Ansys Speos又有哪些具体的功能更新吧~

智能搬运机器人|海格里斯将如何持续推进工业和物流的智能化升级与发展?

存取、搬运、分拣是物流行业中的通用功能,但具体到每个行业又十分不同,例如:新能源电池领域,它所搬运的东西是电池,50KG~200KG;快递行业领域,所要处理的物料是那种扁平件和信封等等,…

【计算机网络】网络基础知识

一. 网络发展史 独立模式(单机模式):计算机之间相互独立,各自拥有独立的数据。 网络互连:将多台计算机连接在一起,完成数据共享。 随着时代的发展,越来越需要计算机之间进行互相通信&#…

人工智能_CPU安装运行ChatGLM大模型_ChatGlm-6B_启动命令行对话_安装API调用接口_005---人工智能工作笔记0100

然后我们再进入 /data/module/ChatGLM-6B-main文件夹 然后我们去启动,命令行工具 python3 cli_demo.py 可以看到也是可以用了. 正常可以用了. 然后主要来看,如何使用api来调用呢,这样才可以,做自己的界面 可以看到就非常简单了只需要: 走到 /data/module/

高盛:日本这轮通胀是否可持续,关键看房租

租金在日本CPI中的权重高达20%,高盛预计短期内租金将继续拖累通胀至1.7%或以下,长期有望温和上行,使通胀稳在2%的水平。 日本正在转向“去通缩”,房租能否支撑通胀态势? 在日股今年一路高歌、有望“收复失地”时&…

如何在OpenWRT安装内网穿透工具实现远程访问本地搭建的web网站界面

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器,目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器,并且和…

JAVA高并发——单例模式和不变模式

文章目录 1、探讨单例模式2、不变模式 由于并行程序设计比串行程序设计复杂得多,因此我强烈建议大家了解一些常见的设计方法。就好像练习武术,一招一式都是要经过学习的。如果自己胡乱打,效果不见得好。前人会总结一些武术套路,对…

嵌入式学习-qt-Day2

嵌入式学习-qt-Day2 一、思维导图 二、作业 1.使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 2.将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账…

关于windows上Python3.12.0安装FastAPI入坑指南

#工作笔记# 先说下起因: 年前兄弟说有个webapi的需求看怎么解决,抽空想到Python比较容易上手,而且FastAPI性能号称拥有可与NodeJS和Go并肩的极高性能。 FastAPI官网注明使用 Python 3.8+ ,而我本机又有从Py3.6到Py3.12的每个大版本,见下图 接着入坑开始了。。。 #问题描述…

webpack的使用(上)

前言:在项目中安装和配置webpack、配置打包的入口与出口、配置webpack的自动打包功能、配置 html-webpack-plugin 生成预览页面、配置自动打包相关的参数等相关内容 一、了解webpack 1、概念 webpack 是一个流行的前端项目构建工具(打包工具),可以解决…

SpringCloud(15)之SpringCloud Gateway

一、Spring Cloud Gateway介绍 Spring Cloud Gateway 是Spring Cloud团队的一个全新项目,基于Spring 5.0、SpringBoot2.0、 Project Reactor 等技术开发的网关。旨在为微服务架构提供一种简单有效统一的API路由管理方式。 Spring Cloud Gateway 作为SpringCloud生态…

运维SRE-18 自动化批量管理-ansible4

12.2handles handles触发器(条件),满足条件后再做什么事情应用场景:想表示:配置文件变化,再重启服务 配置handlers之前,每次运行剧本都会重启nfs,无论配置文件是否变化。 [rootm01 /server/ans/playbook]…

前端项目如何准确预估个人工时

补充 看来很多小伙伴对这个问题感兴趣,大家不要忽视了压工时这个事。 领导为什么会压工时? 使他的KPI更好看不清楚做这个东西实际要多长时间因为第2点的原因,他也无法去争取合理时间部分人看着下属加班,有种大权在握&#xff0…

题目 1226: 方砖问题

题目描述: 用边长小于N的正方形方砖(注意,不要求所有的方砖大小相同,请看样例说明)不重叠地铺满N*N的正方形房间,最少要几块方砖。 解题思路: 1.n是偶数时,都可以用4块边长为n/2的方砖填满;例…

2024/2/22

P8680 [蓝桥杯 2019 省 B] 特别数的和 题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 00),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共28 个,他们的和是574。 请问,在…

SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测

SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测 目录 SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实…