(C++回溯01) 组合

77、组合

回溯题目三步走

1. 确定参数

2. 确定终止条件

3. for 循环横向遍历,递归纵向遍历

class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int startIndex) {if(path.size() == k) {result.push_back(path);return;}for(int i = startIndex; i <= n; i++) {path.push_back(i);backtracking(n, k, i + 1);path.pop_back();}}vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return result;}
};

剪枝操作:

公式:n - (k - path.size()) + 1

k - path.size() 意思是还可选取多少元素

n - (k - path.size()) 意思是去掉可选取元素个数后的位置

n - (k - path.size()) + 1 为当前可以组合的最后一个位置

剪枝后代码:

class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int startIndex) {if(path.size() == k) {result.push_back(path);return;}for(int i = startIndex; i <= n; i++) {int flag = n - (k - path.size()) + 1;if(i > flag) {return;}path.push_back(i);backtracking(n, k, i + 1);path.pop_back();}}vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return result;}
};

216、组合总和 III

class Solution {
public:vector<vector<int>> result;vector<int> path;int count = 0;void backtracking(int k, int n, int startIndex) {if(path.size() == k) {if(count == n)result.push_back(path);return;}for(int i = startIndex; i < 10; i++) {path.push_back(i);count += i;backtracking(k, n, i + 1);path.pop_back();count -= i;}}vector<vector<int>> combinationSum3(int k, int n) {backtracking(k, n, 1);return result;}
};

剪枝操作:

class Solution {
public:vector<vector<int>> result;vector<int> path;int count = 0;void backtracking(int k, int n, int startIndex) {if(path.size() == k) {if(count == n)result.push_back(path);return;}for(int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {count += i;if(count > n) {count -= i;return;}path.push_back(i);backtracking(k, n, i + 1);path.pop_back();count -= i;}}vector<vector<int>> combinationSum3(int k, int n) {backtracking(k, n, 1);return result;}
};

17、电话号码的字母组合

class Solution {
private:string letterMap[10] = {"","","abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz", // 9};
public:vector<string> result;string path;void backtacking(string& digits, int index) {if(index == digits.size()) {result.push_back(path);return;}string letters = letterMap[digits[index] - '0'];for(int i = 0; i < letters.size(); i++) {path.push_back(letters[i]);backtacking(digits, index + 1);path.pop_back();}}vector<string> letterCombinations(string digits) {if(digits.size() == 0) {return result;}backtacking(digits, 0);return result;}
};

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

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

相关文章

项目的纪要

ai客服项目中发现的问题: 可以在控制台看到我们存储的cookie: 可以看到是这样的, 但是我们通过getCookie方法专门获取这个字段, 然后在控制台打印后 const userName getTheCookie(SA_USER_NICK_NAME); console.log(userName, userName); 输出结果是: 然后我们尝试通过…

C++拷贝和移动

一、赋值 1.使拷贝赋值非virtual&#xff0c;以const& 传参&#xff0c;并返回非const的引用 2.使移动赋值非virtual&#xff0c;以&&传参&#xff0c;并返回非const的引用 // 拷贝赋值 vector& operator (const vector& other);// 移动赋值 vector&am…

2.3 openCv 对矩阵执行掩码操作

在矩阵上进行掩模操作相当简单。其基本思想是根据一个掩模矩阵(也称为核)来重新计算图像中每个像素的值。这个掩模矩阵包含的值决定了邻近像素(以及当前像素本身)对新的像素值产生多少影响。从数学角度来看,我们使用指定的值来做一个加权平均。 具体而言,掩模操作通常涉…

怎么服务器组内网?

服务器组内网&#xff0c;就是将两台以上的服务器建立一个局域网&#xff0c;使得这些服务器之间的连接更加安全快速&#xff0c;运行效率更高&#xff0c;起到 一加一大于二的效果。内网既能在同一个机柜或机房组件&#xff0c;也可以在不同城市或者不同国家之间组建&#xff…

JMeter的使用方法及https的使用方法

软件安装&#xff1a; 参考链接&#xff1a;JMeter 下载安装及环境配置&#xff08;包含jdk1.8安装及配置&#xff09;_jmeter5.2.1需要什么版本的jdk-CSDN博客 前置知识储备&#xff1a; Https请求的案例: JMeter的第一个案例 增加线程数 线程&#xff08;thread&#xff…

IP地址在后端怎么存才好?

一、地址的区别 在网络中&#xff0c;IP地址分为IPV4和IPV6&#xff0c;IPV4是一共占32位的&#xff0c;每8位小数点分隔&#xff0c;IPV6占128位&#xff0c;16位为一组&#xff0c;一共是8组。 IPV4 列&#xff1a;192.168.1.12&#xff08;每组转十进制后&#xff09; 1100…

量化机器人对市场趋势的反应速度

量化机器人对市场趋势的反应速度在当前金融市场中具有重要意义。随着算法和大数据技术的发展&#xff0c;量化机器人通过先进的计算能力和实时数据分析&#xff0c;能够迅速捕捉市场变化&#xff0c;做出及时的交易决策。这种快速反应能力&#xff0c;不仅提高了交易效率&#…

Meta 发布 LLAMA 3.1;特斯拉无人出租车推迟至 10 月;谷歌将向 Waymo 再投 50 亿美元

先瞧一下 Chat 和 Agent 的差异。 Chat&#xff08;聊天&#xff09;&#xff1a;纯粹的 Chat&#xff0c;宛如一个主要由“大脑与嘴”组成的智能体&#xff0c;着重于信息处置和语言沟通。诸如 ChatGPT 这般的系统&#xff0c;其能够领会用户的询问&#xff0c;给出有益且连贯…

Linux:基础命令学习

目录 一、ls命令 实例&#xff1a;-l以长格式显示文件和目录信息 实例&#xff1a;-F根据文件类型在列出的文件名称后加一符号 实例&#xff1a; -R 递归显示目录中的所有文件和子目录。 实例&#xff1a; 组合使用 Home目录和工作目录 二、目录修改和查看命令 三、mkd…

go语言环境变量及其作用

Go语言环境变量 set GO111MODULEon set GOARCHamd64 set GOBIN set GOCACHEC:\Users\rrrr\AppData\Local\go-build set GOENVC:\Users\rrrr\AppData\Roaming\go\env set GOEXE.exe set GOEXPERIMENT set GOFLAGS set GOHOSTARCHamd64 set GOHOSTOSwindows set GOINSECURE se…

网络学习|如何理解服务的端口号

文章目录 1. 端口号的定义2. 端口号的分类3. 端口号的用途4. 注意事项5. 示例图解 后端面试中可能遇到的端口相关问题及答案1. 什么是端口号&#xff1f;为什么需要端口号&#xff1f;2. 知名端口&#xff08;Well-Known Ports&#xff09;有哪些&#xff0c;举例说明&#xff…

【面试题】喔影网络科技面试题复盘

1. 分别用Flex布局和Grid布局实现两边固定中间自适应三列布局 相关文章&#xff1a;https://juejin.cn/post/7249010956935266364?searchId202407250009004EE0BBD1E792FB92FB60#heading-5 2. Http1.1 和 Http 2 有什么区别&#xff1f; 新的二进制格式&#xff1b;多路复用&a…

《Java初阶数据结构》----4.<线性表---Stack栈和Queue队列>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

学习笔记6:docker swarm

docker swarm Docker Swarm 是 Docker 原生的集群管理工具&#xff0c;它允许你将多个 Docker 主机组合成一个虚拟的单一主机。通过 Docker Swarm&#xff0c;你可以管理多个容器的部署、扩展和负载均衡&#xff0c;而不需要手动配置每台主机。以下是 Docker Swarm 的一些关键…

DAMA学习笔记(七)-数据集成和互操作

1.引言 数据集成和互操作(DII)描述了数据在不同数据存储、应用程序和组织这三者内部和之间进行移动和整合的相关过程。数据集成是将数据整合成物理的或虚拟的一致格式。数据互操作是多个系统之间进行通信的能力。数据集成和互操作的解决方案提供了大多数组织所依赖的基本数据管…

STM32F103C8T6与HC-05:构建低功耗蓝牙通信网络

构建低功耗蓝牙&#xff08;Bluetooth Low Energy, BLE&#xff09;通信网络是一种在嵌入式系统中实现设备间无线通信的有效方式。STM32F103C8T6微控制器虽然原生不支持BLE&#xff0c;但可以通过外接BLE模块如HC-05&#xff08;注意&#xff1a;HC-05本身不是低功耗蓝牙模块&a…

跨文档消息传递:WebKit中的Web通信新纪元

跨文档消息传递&#xff1a;WebKit中的Web通信新纪元 在现代Web应用中&#xff0c;跨文档消息传递&#xff08;Cross-document messaging&#xff09;是一种允许不同源的文档进行通信的机制。这种机制对于构建复杂的Web应用&#xff0c;如嵌入式框架&#xff08;iframes&#…

【SpringBoot】第3章 SpringBoot的系统配置

3.1 系统配置文件 3.1.1 application.properties SpringBoot支持两种不同格式的配置文件&#xff0c;一种是Properties&#xff0c;一种是YML。 SpringBoot默认使用application.properties作为系统配置文件&#xff0c;项目创建成功后会默认在resources目录下生成applicatio…

父子组件的传参问题,一方改变,另一方随之改变

目录 1.问题 2.解决方案 3.前端中的深拷贝及浅拷贝问题总结 1.问题 在子组件中通过emit调用父组件的方法&#xff0c;并传递参数&#xff0c;当子组件中修改传递给父组件的参数时&#xff0c;即使没有将修改后的值传递给父组件&#xff0c;父组件中的值依然修改了。 原因是…

Unity XR Interaction Toolkit设置或监听手柄按键事件(三)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、XRI Default Input Actions1.导入官方案例2.设置控制器绑定&#xff0c;如手柄、主/辅助按钮、操纵杆等1.要设置控制器绑定&#xff0c;如左右手 手柄、主/辅助按钮、操纵杆等…