文章目录

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

77. 组合

题目链接
文章讲解

class Solution {
public:vector<vector<int>> res;  // 存储所有的组合vector<int> path;         // 当前正在构建的组合// 回溯算法void solve(int n, int k, int start) {// 当 path 的大小达到 k,表示当前组合有效,加入结果集if (path.size() == k) {res.push_back(path);  // 将当前组合添加到结果中return;}// 从 start 开始,尝试所有可能的数字for (int i = start; i <= n; i++) {path.push_back(i);  // 选择当前数字solve(n, k, i + 1); // 继续选择下一个数字,注意这里递归是 i + 1,确保数字递增path.pop_back();     // 回溯,撤销选择,尝试其他可能的组合}}// 主函数,调用 solve 函数开始回溯vector<vector<int>> combine(int n, int k) {solve(n, k, 1);  // 从 1 开始递归return res;      // 返回所有组合结果}
};

216.组合总和III

题目链接
文章讲解

class Solution {
public:vector<vector<int>> ans;  // 存储所有符合条件的组合vector<int> path;         // 当前正在构建的组合int sum = 0;              // 当前组合的和// 回溯函数,递归地选择数字void solve(int k, int n, int start, int &sum) {// 1. 如果选择的数字个数达到了 k,检查和是否为 nif (path.size() == k) {if (sum == n)  // 如果和恰好为 n,则加入结果ans.push_back(path);return;}// 2. 从 start 开始,尝试选择数字 1 到 9for (int i = start; i <= 9; i++) {path.push_back(i);  // 选择当前数字sum += i;            // 更新和solve(k, n, i + 1, sum);  // 递归选择下一个数字sum -= i;            // 回溯,撤销选择path.pop_back();     // 移除当前数字,继续尝试其他数字}}// 主函数,调用回溯函数开始求解vector<vector<int>> combinationSum3(int k, int n) {solve(k, n, 1, sum);  // 从 1 开始递归,寻找所有组合return ans;            // 返回所有组合结果}
};

17. 电话号码的字母组合

题目链接
文章讲解

class Solution {
public:vector<string> ans;  // 存储所有字母组合string path;         // 当前递归路径,用于存储字母组合// 回溯函数,递归地生成字母组合void solve(vector<string>& s, int k, int start, const string& digits) {// 当 path 的长度达到 k(即字母组合的长度),将 path 加入到结果中if (path.size() == k) {ans.push_back(path);  // 添加当前组合到结果return;}// 获取当前数字对应的字母组string p = s[digits[start] - '0'];// 遍历该字母组中的每个字母,递归生成组合for (int i = 0; i < p.size(); i++) {path += p[i];               // 选择当前字母solve(s, k, start + 1, digits);  // 递归选择下一个数字path.pop_back();             // 回溯,撤销选择}}// 主函数,返回所有可能的字母组合vector<string> letterCombinations(string digits) {// 如果输入为空,直接返回空结果if (digits.empty()) return ans;// 初始化字母映射:数字 2-9 对应的字母集vector<string> s = {"", "",                    // 0 和 1 没有对应的字母"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};int k = digits.size();  // 目标组合的长度// 调用回溯函数,开始递归生成字母组合solve(s, k, 0, digits);return ans;  // 返回所有字母组合}
};

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】Popup menu:弹出式菜单

Popup menu&#xff1a;弹出式菜单 PopupMenu&#xff0c;弹出菜单&#xff0c;一个模态形式展示的弹出风格的菜单&#xff0c;绑在在某个View上&#xff0c;一般出现在被绑定的View的下方&#xff08;如果下方有空间&#xff09;。 注意&#xff1a;弹出菜单是在API 11和更高版…

20250724-day21

Main Memory Database System&#xff08;MMDB&#xff09;&#xff1a;基于内存的数据库系统 File Database&#xff08;FDB&#xff09;&#xff1a;基于文件的数据库 Netware Database&#xff08;NDB&#xff09;&#xff1a;基于网络的数据库 daemon&#xff1a;守护进程 …

API是什么,如何保障API安全?

API&#xff08;应用程序编程接口&#xff09;是什么&#xff1f; API&#xff08;Application Programming Interface&#xff09;是不同软件系统之间通信的“桥梁”。它定义了应用程序如何请求服务、交换数据或调用功能&#xff0c;无需了解底层实现细节。例如&#xff0c;当…

深度分析Java多线程机制

Java 多线程是掌握高性能、高响应性应用程序开发的关键&#xff0c;它涉及到语言特性、JVM 实现、操作系统交互以及并发编程的核心概念。 核心目标&#xff1a; 充分利用现代多核 CPU 的计算能力&#xff0c;提高程序吞吐量&#xff08;单位时间内处理的任务量&#xff09;和响…

Android热修复实现方案深度分析

热修复的核心目标是在**不发布新版本、不重新安装、不重启应用&#xff08;或仅轻量级重启&#xff09;**的情况下&#xff0c;修复线上应用的 Bug 或进行小范围的功能更新&#xff0c;极大地提升用户体验和问题响应速度。 一、热修复的核心原理 无论哪种方案&#xff0c;其核心…

HTML前端颜色渐变动画完整指南

渐变动画已经成为现代网页设计中不可或缺的元素&#xff0c;它们不仅能为网站增添视觉吸引力&#xff0c;还能显著提升用户体验。通过巧妙运用CSS渐变动画&#xff0c;开发者可以创造出令人印象深刻的动态背景效果&#xff0c;而无需依赖图片或复杂的脚本。 渐变动画的魅力所在…

b-up:Enzo_mi:Transformer DETR系列

1.视频1&#xff1a;self-Attention&#xff5c;自注意力机制 &#xff5c;位置编码 &#xff5c; 理论 代码 注意&#xff1a; q-查询; k-商品标签&#xff1b; v-值&#xff08;具体商品&#xff09; * 不是指乘法&#xff0c;类似概念 a1:相似度&#xff1b; b1:总分 若想…

算法题(179):单调栈

审题&#xff1a; 本题是单调栈的模板题 补充&#xff1a;单调栈 单调栈中的数据始终保持单调递增或单调递减 使用情景&#xff1a;给定一个数组&#xff0c;要求寻找 1.某个数左侧&#xff0c;离他最近且值大于他的数 2.某个数左侧&#xff0c;离他最近且值小于他的数 3.某个数…

CF每日5题(1500-1600)

545C 贪心 1500 题意&#xff1a;给 n 棵树在一维数轴上的坐标 xix_ixi​ &#xff0c;以及它们的长度 hih_ihi​。现在要你砍倒这些树&#xff0c;树可以向左倒也可以向右倒&#xff0c;砍倒的树不能重合、当然也不能覆盖其他的树原来的位置&#xff0c;现在求最大可以砍倒的…

HW蓝队:天眼告警监测分析之Web攻击

Web攻击 信息泄露 敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等&#xff0c;在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据 信息收集方法 漏洞分类 备份文…

大腾智能国产3D CAD软件正式上架华为云云商店

深圳市大腾信息技术有限公司&#xff08;以下简称“大腾智能”&#xff09;与华为云达成深度合作&#xff0c;大腾智能CAD软件及配套服务通过了华为云在功能适配、安全可用、稳定高效等方面的严选商品认证&#xff0c;已正式上架华为云云商店&#xff0c;成为华为云云商店的联营…

论文复现-windows电脑在pycharm中运行.sh文件

1.更改终端路径&#xff08;前提&#xff1a;已下载git bash&#xff09;2.授权打开pycharm终端&#xff0c;输入 chmod x 文件名3.根据当前位置&#xff0c;运行.sh文件

开关电源安全保护电路:浪涌保护、过流保护、过压保护

开关电源安全保护电路:浪涌保护、过流保护、过压保护 引言 对于开关电源而言, 安全、可靠性历来被视为重要的性能之一. 开关电源在电气技术指标满足电子设备正常使用要求的条件下, 还要满足外界或自身电路或负载电路出现故障的情况下也能安全可靠地工作. 为此, 须有多种保护措…

C语言(十)

一、函数概述函数是面向过程编程思想的具体体现&#xff0c;主要作用&#xff1a;降低程序之间的耦合性提高代码的复用性和可维护性一个完整的 C 程序由**一个或多个程序模块&#xff08;源文件&#xff09;**组成。为便于开发与调试&#xff0c;通常会将代码拆分为多个源文件&…

QT项目-仿QQ音乐的音乐播放器(第二节)

目录 自定义控件&#xff1a; BtForm类中实现 BtForm上的动画效果 自定义控件&#xff1a; 该控件实际由&#xff1a;图⽚、⽂字、动画三部分组成。图⽚和⽂字分别⽤QLabel展⽰&#xff0c;动画部分内部实际为4 个QLabel。 ① 将BtForm的geometry的宽度和⾼度修改为200*35。…

【世纪龙科技】数字课程资源-新能源汽车概论

一、课程介绍本课程为通过项目任务式教学&#xff0c;全面系统的讲解了新能源汽车的基础知识及相关技能&#xff0c;培养和提高学生的动手能力和理论知识的工程应用能力。以典型工作任务带动知识与技能的学习&#xff0c;采用项目教学培养学生的岗位技能、学习能力和职业素养。…

iOS Core Data 本地数据库 使用详解:从模型关系到数据操作

一、引言&#xff1a;Core Data&#xff0c;在本地数据持久化中的地位在 iOS 开发中&#xff0c;本地数据存储几乎是每一个 App 都绕不开的问题。无论是缓存用户信息、离线浏览内容&#xff0c;还是记录用户操作历史&#xff0c;一个合适的数据持久化方案都能大大提升应用的体验…

Java-79 深入浅出 RPC Dubbo 动态路由架构详解:从规则设计到上线系统集成

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-30-新发布【1T 万亿】参数量大模型&#xff01;Kim…

Linux内核中动态内存分配函数解析

在C语言中&#xff0c;动态内存分配通常用于在运行时申请内存。在内核编程中&#xff0c;动态内存分配与用户空间有所不同&#xff0c;因为内核需要更谨慎地处理内存&#xff0c;且不能使用用户空间的库&#xff08;如glibc&#xff09;。下面我们将详细分析Linux内核中动态申请…

Next.js 中配置不同页面布局方案

在 Next.js 应用中&#xff0c;你可以通过多种方式实现某些页面全屏、某些页面带菜单/页眉/页脚的需求。以下是几种实现方案&#xff1a; 方案一&#xff1a;使用多个布局组件 1. 创建不同的布局组件 // app/default-layout.tsx import Header from /components/header; import…