当前位置: 首页 > article >正文

【LeetCode 刷题】回溯算法-组合问题

此博客为《代码随想录》二叉树章节的学习笔记,主要内容为回溯算法组合问题相关的题目解析。

文章目录

  • 77. 组合
  • 216.组合总和III
  • 17.电话号码的字母组合
  • 39. 组合总和
  • 40. 组合总和 II

77. 组合

题目链接

class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:res, path = [], []def dfs(start: int, n: int) -> None:if len(path) > k or n < 0:returnif len(path) == k and n == 0:res.append(path.copy())returnfor i in range(start, 10):path.append(i)dfs(i + 1, n - i)path.pop()dfs(1, n)return res
  • dfs 函数的参数为起始位置;由于每个数只能用一次,因此在后序的递归过程中只需调整起始位置为上一个选择的元素的后一个位置即可,也即 dfs(i + 1)
  • 如果 append() 的时候不添加 .copy(),则放入结果列表的仍然是原始 path 变量的引用,对 path 的修改会影响到结果列表
  • 优化点:for 循环选择的起始位置之后的元素个数已经不足需要的元素个数了,则可以直接剪枝

216.组合总和III

题目链接

class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:res, path = [], []def dfs(start: int, n: int) -> None:if len(path) == k and n == 0:res.append(path.copy())returnif len(path) > k or n < 0:returnfor i in range(start, 10):path.append(i)dfs(i + 1, n - i)path.pop()dfs(1, n)return res
  • dfs 的两个参数分别表示:起始位置,剩余要满足的值
  • 相较于上题,额外添加了总和为 n 的限制

17.电话号码的字母组合

题目链接

class Solution:MAPPING = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"]def letterCombinations(self, digits: str) -> List[str]:res, path = [], []if not digits: return resdef dfs(start: int) -> None:if start == len(digits):res.append(''.join(path))returnfor c in self.MAPPING[int(digits[start])]:path.append(c)dfs(start + 1)path.pop()dfs(0)return res
  • dfs 函数的参数为起始位置,也即为在该轮递归中要处理的第 start 位 digits

39. 组合总和

题目链接

class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:res, path = [], []def dfs(start: int, target: int) -> None:if target < 0:returnif target == 0:res.append(path.copy())for i in range(start, len(candidates)):if i > start and candidates[i] == candidates[i-1]:continuepath.append(candidates[i])dfs(i, target - candidates[i])path.pop()dfs(0, target)return res
  • dfs 的两个参数分别表示:起始位置,剩余要满足的值;由于此题元素可以重复使用,因此在递归调用时,起始位置不变,即 dfs(i, ...)
  • 此题要求结果列表中的组合不重复,通过 candidates[i] != candidates[i-1] 来保证,因为如果 candidates[i] == candidates[i-1],则 candidates[i-1] 生成的递归树是 candidates[i] 生成的递归树的子树

40. 组合总和 II

题目链接

class Solution:def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:res, path = [], []candidates.sort()def dfs(start: int, target: int) -> None:if target < 0:returnif target == 0:res.append(path.copy())for i in range(start, len(candidates)):if i > start and candidates[i] == candidates[i-1]:continuepath.append(candidates[i])dfs(i + 1, target - candidates[i])path.pop()dfs(0, target)return res
  • 此题与上题的不同点:每个元素只能使用一次,且原始 candidates 中是存在重复元素的,例如有两个 1,同时选择这两个 1 是没有问题的
  • 回溯之前需添加排序;递归调用从下一个位置开始,即 dfs(i + 1, ...)

相关文章:

【LeetCode 刷题】回溯算法-组合问题

此博客为《代码随想录》二叉树章节的学习笔记&#xff0c;主要内容为回溯算法组合问题相关的题目解析。 文章目录 77. 组合216.组合总和III17.电话号码的字母组合39. 组合总和40. 组合总和 II 77. 组合 题目链接 class Solution:def combinationSum3(self, k: int, n: int) …...

Spring的AOP的JoinPoint和ProceedingJoinPoint

Spring的AOP的JoinPoint 在Spring AOP中&#xff0c;JoinPoint 是一个核心接口&#xff0c;用于表示程序执行过程中的一个连接点&#xff08;如方法调用或异常抛出&#xff09;。它提供了访问当前被拦截方法的关键信息的能力。以下是关于 JoinPoint 的详细说明&#xff1a; 一…...

终极版已激活!绿话纯净,打开即用!!!

今天我想和大家聊聊一个非常实用的工具——视频转换大师最终版。 视频转换大师终极版&#xff0c;堪称一款全能型的视频制作神器&#xff0c;集视频转换与编辑功能于一体。它搭载的视频增强器技术&#xff0c;能够最大限度地保留原始视频质量&#xff0c;甚至还能实现质量的进…...

【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)

文章目录 【2025年最新版】Java JDK安装、环境配置教程 &#xff08;图文非常详细&#xff09;1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序&#xff1a;6.2 编译和运行程序&#xff1a;6.3 在显示或更改文件的…...

C++ strcpy和strcat讲解

目录 一. strcpy 代码演示&#xff1a; 二.strcat 代码演示&#xff1a; 一. strcpy 使⽤字符数组可以存放字符串&#xff0c;但是字符数组能否直接赋值呢&#xff1f; ⽐如&#xff1a; char arr1[] "abcdef"; char arr2[20] {0}; arr2 arr1;//这样这节赋值可…...

STM32 01 LED

一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC&#xff1b;如果没有找到hex文件&#xff08;在objects文件夹下&#xff09;&#xff0c;在keil中options for target-output- 勾选 create hex file。 如果要修改编程 &#xff1a;重新编译-下载/编程-单片机重…...

[LeetCode]day10 707.设计链表

707. 设计链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果…...

【图床配置】PicGO+Gitee方案

【图床配置】PicGOGitee方案 文章目录 【图床配置】PicGOGitee方案为啥要用图床图床是什么配置步骤下载安装PicGoPicGo配置创建Gitee仓库Typora中的设置 为啥要用图床 在Markdown中&#xff0c;图片默认是以路径的形式存在的&#xff0c;类似这样 可以看到这是本地路径&#x…...

AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言

1. 定义目标与需求 首先&#xff0c;要明确你希望AI智能体做什么。是自动化任务、数据分析、自然语言处理&#xff0c;还是其他功能&#xff1f;明确目标可以帮助你选择合适的技术和方法。 2. 选择开发平台与工具 开发AI智能体的软件时&#xff0c;你需要选择适合的编程语言、…...

ArkTS语言介绍

文章目录 一、基本知识声明类型运算符语句函数函数声明可选参数Rest参数返回类型函数的作用域函数调用函数类型箭头函数(又名Lambda函数)闭包函数重载类字段方法构造函数可见性修饰符对象字面量抽象类接口接口属性接口继承抽象类和接口泛型类型和函数泛型类和接口泛型约束泛型…...

基于 oneM2M 标准的空气质量监测系统的互操作性

论文标题 英文标题&#xff1a; Interoperability of Air Quality Monitoring Systems through the oneM2M Standard 中文标题&#xff1a; 基于 oneM2M 标准的空气质量监测系统的互操作性 作者信息 Jonnar Danielle Diosana, Gabriel Angelo Limlingan, Danielle Bryan Sor…...

lstm部分代码解释1.0

这段代码是使用 Python 中的 Pandas 和 NumPy 库对数据进行读取和处理的操作。以下是对每一行代码的详细解释&#xff1a; 第一行代码 Python复制 df pd.read_csv("output.csv") 功能&#xff1a;使用 Pandas 的 read_csv 函数读取一个名为 output.csv 的文件&am…...

Flutter常用Widget小部件

小部件Widget是一个类&#xff0c;按照继承方式&#xff0c;分为无状态的StatelessWidget和有状态的StatefulWidget。 这里先创建一个简单的无状态的Text小部件。 Text文本Widget 文件&#xff1a;lib/app/app.dart。 import package:flutter/material.dart;class App exte…...

电路研究9.2.6——合宙Air780EP中HTTP——HTTP GET 相关命令使用方法研究

这个也是一种协议类型&#xff1a; 14.16 使用方法举例 根据之前多种类似的协议的相关信息&#xff1a; HTTP/HTTPS&#xff1a;超文本传输协议&#xff08;HTTP&#xff09;用于Web数据的传输&#xff0c;而HTTPS是HTTP的安全版本&#xff0c;使用SSL/TLS进行加密。与FTP相比&…...

【力扣】283.移动零

AC截图 题目 思路 遍历nums数组&#xff0c;将0删除并计数&#xff0c;最后在nums数组尾部添加足量的零 有一个问题是&#xff0c;vector数组一旦erase某个元素&#xff0c;会导致迭代器失效。好在有解决办法&#xff0c;erase会返回下一个有效元素的新迭代器。 代码 class …...

合并2个排序的链表

合并2个排序的链表 递归解法和迭代解法 /*** 节点实体类*/ class ListNode {public int val;public String name;public ListNode next;public ListNode(int val) {this.val val;} }/*** 链表节点类*/ class Node {// next存的是下个节点的引用Node next;// 值int val;//为赋…...

白话DeepSeek-R1论文(二)| DeepSeek-R1:AI “升级打怪”,从“自学成才”到“全面发展”!

最近有不少朋友来询问Deepseek的核心技术&#xff0c;今天开始陆续针对DeepSeek-R1论文中的核心内容进行解读&#xff0c;并且用大家都能听懂的方式来解读。这是第二篇趣味解读。 DeepSeek-R1&#xff1a;AI “升级打怪”&#xff0c;从“自学成才”到“全面发展”&#xff01…...

linux设置mysql远程连接

首先保证服务器开放了mysql的端口 然后输入 mysql -u root -p 输入密码后即可进入mysql 然后再 use mysql; select user,host from user; update user set host"%" where user"root"; flush privileges; 再执行 select user,host from user; 即可看到变…...

并发模式:驾驭多线程的艺术

并发模式:驾驭多线程的艺术 在并发编程中,不同的任务之间需要协作和通信,才能高效地完成工作。为了更好地组织和管理并发任务,软件工程师们总结出了一些经典的并发模式,例如生产者-消费者模式、发布-订阅模式等。本文将深入探讨这些常见的并发模式,并结合实例进行讲解,…...

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中&#xff0c;向 addConstr 这个方法中传入一个 TempConstr 对象&#xff0c;在模型中就会根据这个对象生成一个约束。更重要的是&#xff1a;TempConstr 对象可以传给所有addConstr系列方法&#xff0c;所以下面先介绍 TempConstr 对象 TempConstr TempC…...

va_list/va_start/va_end/var_arg可变参数的使用

个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 做日志打印或其它可变参数处理时&#xff0c;通常我们会想到使用va_list/va_start/va_end做可变参数的收集和处理。使用这种方式处理可变参数比较通用&#xff0c;同时适用于c与c中。 1. 关于va_list的理解 v…...

【linux网络(4)】传输层协议详解(上)

目录 前言1. UDP协议报文详解2. TCP协议的报文格式3. TCP的确认应答机制4. TCP的连接管理机制1. TCP三次握手的过程2. TCP四次挥手的过程 5. 总结 前言 上一篇文章介绍了应用层中最重要的http协议&#xff0c;本篇文章将讲解传输层的两个协议: TCP和UDP. 由于UDP是一种简洁的协…...

【Docker】dockerfile识别当前构建的镜像平台

在编写dockerfile的时候&#xff0c;可能会遇到需要针对不同平台进行不同操作的时候&#xff0c;这需要我们对dockerfile进行针对性修改。 比如opencv的依赖项libjasper-dev在ubuntu18.04上就需要根据不同的平台做不同的处理&#xff0c;关于这个库的安装在另外一篇博客里面有…...

【esp32-uniapp】uniapp小程序篇02——引入组件库

一、引入组件库&#xff08;可自行选择其他组件库&#xff09; 接下来介绍colorUI、uview plus的安装&#xff0c;其他的安装可自行查找教程 1.colorUI weilanwl/coloruicss: 鲜亮的高饱和色彩&#xff0c;专注视觉的小程序组件库 下载之后解压&#xff0c;将\coloruicss-ma…...

使用C# 如何获取本机连接的WIFI名称[C# ---1]

前言 楼主最近在写一个WLAN上位机&#xff0c;遇到了使用C#查询SSID 的问题。CSDN上很多文章都比较老了&#xff0c;而且代码过于复杂。楼主自己想了一个使用CMD来获得SSID的方法 C#本身是没有获得WINDOWS网路信息的能力&#xff0c;必须要用系统API&#xff0c;WMI什么的&…...

机器学习优化算法:从梯度下降到Adam及其实验改进

机器学习优化算法:从梯度下降到Adam及其实验改进 在机器学习和深度学习领域,模型的训练过程本质上是一个优化问题。优化算法的作用是通过调整模型参数,使得模型在给定的数据 集上实现最优性能。而优化算法的效率和效果直接决定了模型的收敛速度和最终表现。 一、优化算法的…...

K8s 中 Ingress-Nginx 结合负载均衡器(Ingress nginx combined with load balancer)

K8s 中 Ingress-Nginx 结合负载均衡器&#xff08;LB&#xff09;的部署全解析 在 K8s的世界里&#xff0c;有效地管理和路由进入集群的外部流量是至关重要的。Ingress-Nginx 作为一款强大的 Ingress 控制器&#xff0c;搭配负载均衡器&#xff08;LB&#xff09;&#xff0c;…...

MATLAB中savefig函数用法

目录 语法 说明 示例 将当前图窗保存到 FIG 文件 将多个图窗保存到 FIG 文件 使用 compact 选项保存图窗 savefig函数的功能是将图窗和内容保存到 FIG 文件。 语法 savefig(filename) savefig(H,filename) savefig(H,filename,compact) 说明 savefig(filename) 将当前…...

Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher

Docker可视化工具对比分析&#xff0c;Docker Desktop&#xff0c;Portainer&#xff0c;Rancher Windows系统中Docker可视化工具对比分析1. 工具概览2. Docker Desktop官网链接&#xff1a;主要优点&#xff1a;主要缺点&#xff1a;版本更新频率&#xff1a; 3. Portainer官网…...

创业项目怎么找?

寻找创业项目需要系统的方法和策略&#xff0c;以下是一些有效的途径和方法&#xff0c;帮助你找到合适的创业项目&#xff1a; 1. 从自身出发 兴趣爱好&#xff1a;选择自己感兴趣的领域&#xff0c;更容易坚持并投入热情。例如&#xff0c;如果你对网络购物感兴趣&#xff0…...