代码随想录算法训练营第二十五天 | 216. 组合总和 III、17. 电话号码的字母组合

代码随想录算法训练营第二十五天 | 216. 组合总和 III、17. 电话号码的字母组合

  • 216. 组合总和 III
    • 题目
    • 解法
  • 17. 电话号码的字母组合
    • 题目
    • 解法
  • 感悟

216. 组合总和 III

题目

在这里插入图片描述

解法

  1. 修改上一天组合的代码
class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int sum_n, int startIdx) {// 终止条件if (path.size() == k) {int sum = 0;for (int i = 0; i < path.size(); i++) {sum += path[i];}if(sum == sum_n) result.push_back(path);return;}for (int i = startIdx; i <= n-(k-path.size())+1; i++) { // 剪枝优化path.push_back(i); // 处理的节点backtracking(n, k, sum_n, i+1);path.pop_back(); // 回溯,撤销处理的节点}return ;}vector<vector<int>> combinationSum3(int k, int n) {backtracking(9, k, n, 1);return result;}
};

2.看过题解之后的简化:减低时间复杂度、优化剪枝

class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking(int sum, int k, int sum_n, int startIdx) {if (sum > sum_n) return; //剪枝// 终止条件if (path.size() == k) {// int sum = 0;// for (int i = 0; i < path.size(); i++) { // 减去时间复杂度//     sum += path[i];// }if(sum == sum_n) result.push_back(path);return;}for (int i = startIdx; i <= 9-(k-path.size())+1; i++) { // 剪枝优化sum += i;path.push_back(i); // 处理的节点backtracking(sum, k, sum_n, i+1);path.pop_back(); // 回溯,撤销处理的节点sum -= i;}return ;}vector<vector<int>> combinationSum3(int k, int n) {result.clear();path.clear();backtracking(0, k, n, 1);return result;}
};

17. 电话号码的字母组合

题目

在这里插入图片描述

解法

  1. 自己解法:按照昨天代码进行改进,代码不够简洁
class Solution {
public:vector<string> result;string path;void backtracking(string digits, int startIdx) {if(path.size() == digits.size()) {result.push_back(path);return ;}for(int i = startIdx; i < digits.size(); i++) {if(digits[i] == '2'){path += 'a';backtracking(digits, i+1);path.pop_back();path += "b";backtracking(digits, i+1);path.pop_back();path += "c";backtracking(digits, i+1);path.pop_back();}else if(digits[i] == '3'){path += "d";backtracking(digits, i+1);path.pop_back();path += "e";backtracking(digits, i+1);path.pop_back();path += "f";backtracking(digits, i+1);path.pop_back();}else if(digits[i] == '4'){path += "g";backtracking(digits, i+1);path.pop_back();path += "h";backtracking(digits, i+1);path.pop_back();path += "i";backtracking(digits, i+1);path.pop_back();}else if(digits[i] == '5'){path += "j";backtracking(digits, i+1);path.pop_back();path += "k";backtracking(digits, i+1);path.pop_back();path += "l";backtracking(digits, i+1);path.pop_back();}else if(digits[i] == '6'){path += "m";backtracking(digits, i+1);path.pop_back();path += "n";backtracking(digits, i+1);path.pop_back();path += "o";backtracking(digits, i+1);path.pop_back();}else if(digits[i] == '7'){path += "p";backtracking(digits, i+1);path.pop_back();path += "q";backtracking(digits, i+1);path.pop_back();path += "r";backtracking(digits, i+1);path.pop_back();path += "s";backtracking(digits, i+1);path.pop_back();}else if(digits[i] == '8'){path += "t";backtracking(digits, i+1);path.pop_back();path += "u";backtracking(digits, i+1);path.pop_back();path += "v";backtracking(digits, i+1);path.pop_back();}else if(digits[i] == '9'){path += "w";backtracking(digits, i+1);path.pop_back();path += "x";backtracking(digits, i+1);path.pop_back();path += "y";backtracking(digits, i+1);path.pop_back();path += "z";backtracking(digits, i+1);path.pop_back();}}return ;}vector<string> letterCombinations(string digits) {result.clear();path.clear();if(digits.empty()) return result;backtracking(digits, 0);return result;}
};

2.看完题解之后,代码优化

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 path;void backtracking(const string& digits, int index) {if(index == digits.size()) {result.push_back(path);return ;}int id = digits[index] - '0';string letter = letterMap[id];for (int i = 0; i < letter.size(); i++) {path.push_back(letter[i]);backtracking(digits, index+1);path.pop_back();}return ;}vector<string> letterCombinations(string digits) {result.clear();path.clear();if(digits.empty()) return result;backtracking(digits, 0);return result;}
};

感悟

重复的代码可以通过规律固定下来,达到简化代码的效果

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

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

相关文章

双向SSM: Vision Mamba Encoder

文章目录 Vision Mamba Encoder初始化输入映射序列变换参数映射BC参数映射delta参数映射 SSM参数初始化A , D矩阵初始化delta参数初始化 双向SSM初始化参数初始化 前向输入映射fast_pathuse_fast_pathno use_fast_path 双向SSMv1前向后向 v2前向后向 Vision Mamba Encoder Vis…

C++使用for(:)遇到的BUG

简化问题代码如下 #include<bits/stdc.h>using namespace std;int main() {vector<int> vec;vector<int> f(9,0);for(int i 0; i<9; i )vec.push_back(i); // for(int j 0; j < vec.size(); j ){ // int t vec[j]; // cout<&l…

数据结构的概念大合集04(队列)

概念大合集04 1、队列1.1 队列的定义1.2队列的顺序存储1.2.1 顺序队1.2.2 顺序队的基本运算的基本思想1.2.3 顺序队的4要素的基本思想 1.3 环形队列1.3.1 环形队列的定义1.3.1 环形队列的实现 1.4 队列的链式存储1.4.1 链队1.4.2 链队的实现方式1.4.3 链队的4要素的基本思想 1.…

kubernetes-maven-plugin部署到microk8s出现问题

为了简化开发环境&#xff0c;我在WSL Ubuntu 虚拟机上安装了一个microk8s环境&#xff0c;接着在项目开发中&#xff0c;想用kubernetes-maven-plugin部署一个服务到k8s上&#xff0c;但出现错误&#xff1a; [WARNING] Error reading service account token from: [/var/run…

C语言之快速排序

目录 一 简介 二 代码实现 快速排序基本原理&#xff1a; C语言实现快速排序的核心函数&#xff1a; 三 时空复杂度 A.时间复杂度 B.空间复杂度 C.总结&#xff1a; 一 简介 快速排序是一种高效的、基于分治策略的比较排序算法&#xff0c;由英国计算机科学家C.A.R. H…

Arthas使用案例(二)

说明&#xff1a;记录一次使用Arthas排查测试环境正在运行的项目BUG&#xff1b; 场景 有一个定时任务&#xff0c;该定时任务是定时去拉取某FTP服务器上的文件&#xff0c;进行备份、读取、解析等一系列操作。 而现在&#xff0c;因为开发环境是Windows&#xff0c; 线上项…

FFmpeg 常用命令汇总

​​​​​​经常用到ffmpeg做一些视频数据的处理转换等&#xff0c;用来做测试&#xff0c;今天总结了一下&#xff0c;参考了网上部分朋友的经验&#xff0c;一起在这里汇总了一下。 1、ffmpeg使用语法 命令格式&#xff1a; ffmpeg -i [输入文件名] [参数选项] -f [格…

Jenkins: 配合docker来部署项目

jenkins docker 部署 1 &#xff09;测试将jenkins构建后的项目部署到docker的nginx镜像中 nginx 镜像内的默认目录在 /usr/share/nginx/html将待部署项目存放在 /usr/share/nginx/html 项目名称目录在Mac环境下的 jenkins系统 中&#xff0c;工程项目默认的路径在 ~/.jenkin…

Spring整合RabbitMQ

需求&#xff1a;使用Spring整合RabbitMQ 步骤&#xff1a; 生产者 1.创建生产者工程 2.添加依赖 3.配置整合 4.编写代码发送消息 消费者步骤相同 生产者 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

linux源配置:ubuntu、centos

1、ubuntu源配置 1&#xff09;先查电脑版本型号: lsb_release -c2&#xff09;再编辑源更新&#xff0c;源要与上面型号对应 参考&#xff1a;https://midoq.github.io/2022/05/30/Ubuntu20-04%E6%9B%B4%E6%8D%A2%E5%9B%BD%E5%86%85%E9%95%9C%E5%83%8F%E6%BA%90/ /etc/apt/…

大衍数列-蓝桥杯?-Lua 中文代码解题第2题

大衍数列-蓝桥杯&#xff1f;-Lua 中文代码解题第2题 中国古代文献中&#xff0c;曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。 它的前几项是&#xff1a;0、2、4、8、12、18、24、32、40、50 … 其规律是&#xff1a;对偶数项&#xff0c;是序号平方再除…

HttpServer整合模块设计与实现(http模块五)

目录 类功能 类定义 类实现 编译测试 源码路标 类功能 类定义 // HttpServer模块功能设计 class HttpServer { private:using Handler std::function<void(const HttpRequest &, HttpResponse &)>;std::unordered_map<std::string, Handler> _get_r…

可调电容的工作原理,结构特点,工艺流程,选型参数及设计注意事项总结

🏡《总目录》 目录 1,概述2,工作原理2.1,变间隙电容原理(Variable-Gap Capacitor)2.2,电压可控电容原理(Voltage-Controlled Capacitor)2.3,压电可调电容原理(Piezoelectric Variable Capacitor)3,结构特点3.1,构造3.2,驱动方式3.3,特性

ISIS接口认证实验简述

默认情况下&#xff0c;ISIS接口认证通过在ISIS协议数据单元&#xff08;PDU&#xff09;中添加认证字段&#xff0c;例如&#xff1a;一个密钥或密码&#xff0c;用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中&#xff0c;并确保邻居之间的通信是可信的…

uniapp 实现双击点赞出现特效

更新一下 老板改了需求要加上特效 1. 创建点赞按钮 首先&#xff0c;在你的页面中创建一个点赞按钮 全局点赞的话就写在最外面的标签就行了。你可以使用 <button> 组件或者自定义一个视图组件。 <template> <view class"container"> <but…

实战:django项目环境搭建(pycharm,virtualBox)

django项目环境搭建 一.创建虚拟环境二.创建PyCharm远程连接 一.创建虚拟环境 需要用到的软件&#xff1a;PyCharm&#xff0c;VirtualBox虚拟机。 1.打开虚拟机终端&#xff0c;创建新的虚拟环境 Book。 2.在虚拟环境中创建新的文件夹 library&#xff0c;cd命令进入该文件…

《算法王晓东》最小重量机器设计问题

最小重量机器设计问题 题目描述 设某一机器由n个部件组成&#xff0c;每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重量&#xff0c; cij 是相应的价格。试设计一个算法&#xff0c;给出总价格不超过d的最小重量机器设计。 算法设计&#xff1a…

【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】

目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置&#xff08;账户/团队/用户&#xff09;①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…

Java映射(含源码)

在Java中&#xff0c;“映射”&#xff08;Map&#xff09;是一个存储键值对的数据结构&#xff0c;允许你通过键&#xff08;Key&#xff09;快速访问值&#xff08;Value&#xff09;。映射中的每个键都是唯一的&#xff0c;这意味着每个键都对应一个特定的值。Java提供了几种…

Flutter中GetX的用法(路由管理)

目录 前言 一.安装 二.从一个计时器开始 三.Getx路由管理 1.普通路由导航 1.导航到新的页面 2.关闭SnackBars、Dialogs、BottomSheets或任何你通常会用Navigator.pop(context)关闭的东西 3.进入下一个页面&#xff0c;但没有返回上一个页面的选项&#xff08;用于SplashS…