【leetcode题解C++】77.组合 and 216.组合总和III and 17.电话号码的字母组合

77. 组合

给定两个整数 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]]

思路: 学习学习了回溯算法,枚举关键是,横向遍历、纵向遍历,组合为了不重复,需要一个startIndex来排除重复的数字。

代码实现:

class Solution {
public:vector<vector<int>> result;vector<int> path;void backTrace(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);backTrace(n, k, i + 1);path.pop_back();}return;}vector<vector<int>> combine(int n, int k) {backTrace(n, k, 1);return result;}
};

216. 组合总和III

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次 

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。

示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解释:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
没有其他符合的组合了。

示例 3:

输入: k = 4, n = 1
输出: []
解释: 不存在有效的组合。
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。

思路:与上一题相似,解法也是回溯,不过值得注意的是,要记录sum的值,而sum怎么创建,怎么初始化值得考究。

代码实现:

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

 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

思路:回溯,不过先要创建键盘(不论是用map还是string数组),还有需要注意的就是,输入的数字是string,需要转成数字。

代码实现:

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

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

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

相关文章

在 CentOS 7上使用 Apache 和 mod_wsgi 部署 Django 应用的方法

简介 Django 是一个强大的 Web 框架&#xff0c;可以帮助您快速启动 Python 应用程序或网站。Django 包括一个简化的开发服务器&#xff0c;用于在本地测试代码&#xff0c;但对于任何与生产相关的事情&#xff0c;都需要一个更安全和功能强大的 Web 服务器。 在本指南中&…

【Vitis】基于C++函数开发组件的步骤

目录 基本步骤 关键领域 • 硬件接口&#xff1a; 任务级并行度&#xff1a; 存储器架构&#xff1a; 微观级别的最优化&#xff1a; 基本步骤 1. 基于 设计原则 建立算法架构。 2. &#xff08;C 语言仿真&#xff09; 利用 C/C 语言测试激励文件验证 C/C 代码的逻辑。…

Vue 3D轮播插件vue-carousel-3d(禁止滑动方法)

video 1.安装 npm install -S vue-carousel-3d2.在main.js全局引入&#xff1a; import Carousel3d from vue-carousel-3d; Vue.use(Carousel3d);3.或者直接在使用页面引入省略了上一步 import { Carousel3d, Slide } from vue-carousel-3d components: {Carousel3d,Slide },…

两个线程实现同步代码示例

#include<myhead.h>//1、定义无名信号量 sem_t sem;//定义生产者线程 void *task1(void *arg) {int num 5;while(num--){sleep(1);printf("我生产了一辆汽车\n");//4、释放资源sem_post(&sem);}//退出线程pthread_exit(NULL); }//定义消费者线程 void *ta…

win10没有调节亮度选项怎么办?

最近新装了win10&#xff0c;装机后”设置“-”显示“里面没有可以调节亮度的地方&#xff0c;这里记录一下解决方案。 解决方案 按WinX键&#xff0c;选择设备管理器&#xff0c;点击”显示适配器“&#xff0c;我这里默认是只有”Microsoft 基本显示适配器“&#xff0c;没有…

c++入门学习④——对象的初始化和清理

目录 对象的初始化和清理&#xff1a; why? 如何进行初始化和清理呢&#xff1f; 使用构造函数和析构函数​编辑 构造函数语法: 析构函数语法: 构造函数的分类&#xff1a; 两种分类方式&#xff1a; 三种调用方法&#xff1a; 括号法&#xff08;默认构造函数调用&…

UE中对象创建方法示例和类的理解

对象创建方法示例集 创建Actor示例 //创建一个护甲道具 AProp* armor GetWorld()->SpawnActor<AProp>(pos, rotator); 创建Component示例 UCapsuleComponent* CapsuleComponent CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent&qu…

自动化报告pptx-python|高效通过PPT模版制造报告(三)

这是自动化报告学习的第三篇了,其他系列: 自动化报告的前奏|使用python-pptx操作PPT(一)自动化报告pptx-python|如何将pandas的表格写入PPTX(二)自动化报告pptx-python|高效通过PPT模版制造报告(三)自动化报告pptx-python|pptx 分析报告的工具包:reportgen(四)本…

C++泛型编程:模板偏特化

模板偏特化为模板提供特殊的实现&#xff0c;针对特定的模板参数或参数组合。 在模板全特化&#xff0c;所有的模板参数都被指定了具体的类型。 我们可以在泛化设计中提供一个特化版本&#xff0c;针对其中某个或者数个模板参数进行特化&#xff0c;我们可以指定一部分模板参…

Langchain ZERO_SHOT_REACT_DESCRIPTION的使用

ZERO_SHOT_REACT_DESCRIPTION 不能记住历史对话&#xff1a; import ChatGLM from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain_community.tools.tavily_search import TavilySearchResults…

【C#】创建Json文件并根据dll路径获取

创建Json文件 更改属性 【代码】根据dll路径获取 Assembly assembly Assembly.GetExecutingAssembly(); string assemblyPath assembly.Location; string relativeDllPath System.IO.Path.Combine(System.IO.Path.GetDirectoryName(assemblyPath), "Json\\test.json&q…

liunx服务器下vim无法:wq解决方案

当你vim某一个文件是&#xff0c;由于其他人在操作&#xff0c;或者上次操作中断&#xff0c;造成的 解决方案&#xff0c;不要&#xff0c;vim -r /etc/****&#xff0c;不然你会得到 正确方案 然后在&#xff0c;直接sudo vim /ect/xxx&#xff0c;还出现第一幅图就直接选…

三、特征提取、特征预处理

三、特征提取、特征预处理 1_特征提取1.1 统计学特征1.2 时域1.3 频域1.4 其他EEG特殊特征 2_特征提取预处理&#xff08;理论及Python实现&#xff09;2.1 归一化2.2 标准化2.3 特征二值化2.4 特征编码2.5 缺失值处理2.6 样本不平衡问题 1_特征提取 1.1 统计学特征 1.2 时域…

LabVIEW高精度微小电容测量

LabVIEW高精度微小电容测量 在电子工程和科研领域&#xff0c;精确测量微小电容值是一项有一定要求的任务&#xff0c;尤其在涉及到高精度和低成本时。设计了一种基于LabVIEW高精度微小电容测量系统&#xff0c;旨在提供一个既经济又高效的解决方案。 该系统的核心在于使用FD…

【Python】ECC加密

ECC加密 .全称&#xff1a;椭圆曲线加密&#xff08;Elliptic Curve Cryptography&#xff09;&#xff0c;ECC加密算法是一种公钥加密技术&#xff0c;以椭圆曲线理论为基础。利用有限域上椭圆曲线的点构成的Abel群离散对数难解性&#xff0c;实现加密、解密和数字签名。将椭圆…

陪诊系统|陪诊小程序|陪诊服务让就医更容易

陪诊系统已经出现了好几年。尤其是这两年&#xff0c;它得到了人们的广泛认可。陪诊行业的快速发展主要是因为人们对这个行业的需求非常大。目前&#xff0c;我国面临着严重的老龄化问题&#xff0c;生活节奏也越来越快&#xff0c;有时候无法亲自陪伴在老人的身边。陪诊工作人…

openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志

文章目录 openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志215.1 性能日志概述215.2 性能日志收集的配置参数 openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志 215.1 性能日志概述 性能日志主要关注外部资源的访问性能问题。 性能日…

re:从0开始的CSS学习之路 4. 长度单位

1. 长度单位 像素px&#xff1a;一个像素就是屏幕中一个不可分割的点。我们应用的屏幕实际上是由一个个的像素点构成的。 不同显示器的像素点大小也不同&#xff0c;在屏幕尺寸相同的情况下&#xff0c;像素越小&#xff0c;显示效果越清晰。 大部分浏览器默认字体大小是16px …

记录一次centos 使用selenium运行环境

这里写自定义目录标题 宝塔面板 安装 selenium安装google-chrome 宝塔面板 安装 selenium 安装google-chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看chrome版本 google-chrome --version 下载对应chrome版本的chro…

VScode上无法运行TSC命令,Typescript

如何解决问题 第一步&#xff1a;使用 winx 快捷键&#xff0c;会出现如下弹窗&#xff0c;鼠标左键单击Windows PowerShell 即可打开shell 第二步&#xff1a;运行 set-ExecutionPolicy RemoteSigned 命令&#xff0c;在询问更改执行策略的时候选择敲Y或者A 第三步&#xff…