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

216.组合总和III

题目链接:216.组合总和III

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

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

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

文章讲解/视频讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html

思路

首先确定回溯的函数参数,参数包括当前的组合path,当前遍历到的数字cur,组合的目标大小k,以及当前组合的总和与目标数字n的差值left。

什么时候回溯结束?当然是当前组合path的大小等于k的时候,这时判断一下left是否等于0,如果等于0则把当前path添加到结果中。

如何遍历?在当前的回溯中,依次从cur往后遍历,如果遍历的数i大于left或者大于9则停止。同时,递归地对添加的下一个数进行处理,此时的left值为left - i。

这里有一个要注意的点,数字只能在1到9之间。

C++实现

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

17.电话号码的字母组合

题目链接:17.电话号码的字母组合

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

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

文章讲解/视频讲解:https://programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88.html

思路

采用回溯来解决该问题,首先分析一下这道题的回溯架构。回溯分为横向和纵向两个方向的搜索,对于这道题来说,横向就是对当前数字i对应的字母映射的搜索,纵向则是对于输入的数字字符串的搜索。

依然按照回溯的三部曲进行分析。

回溯的函数参数?参数应该包括当前的字母组合path,当前遍历到的数字字符串下标cur,以及对于数字字符串digits的引用。

回溯什么时候结束?当数字字符串下标cur等于digits的长度的时候,表示已经遍历到了digits字符串的末尾。

如何进行遍历?在横向搜索过程中,依次遍历当前数字对应的字母列表,在每一次的遍历过程中,递归地对cur + 1的数字字符串下标进行纵向搜索。

C++实现

class Solution {
public:vector<string> results;vector<string> digitMaps;vector<string> letterCombinations(string digits) {digitMaps = {"0", "0", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};string path;backtracking(path, 0, digits);return results;}void backtracking(string& path, int cur, const string& digits){if(cur == digits.size()){if(path != "") results.push_back(path);return;}int num = digits[cur] - '0';for(int i = 0;i<digitMaps[num].size();i++){path.push_back(digitMaps[num][i]);backtracking(path, cur + 1, digits);path.pop_back();}}
};

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

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

相关文章

ULINK2仿真器安装使用之工程设置

一、 ULINK2仿真器 ULINK2是ARM公司最新推出的配套RealView MDK使用的仿真器&#xff0c;是ULink仿真器的升级版本。ULINK2不仅具有ULINK仿真器的所有功能&#xff0c;还增加了串行调试&#xff08;SWD&#xff09;支持&#xff0c;返回时钟支持和实时代理等功能。开发工程师通…

基于python热门旅游景点推荐系统+爬虫技术

大数据分析&#xff0c;数据可视化等皆可用。 源码分享。

vue-vben-admin 与.net core 结合实例 【自学与教学 小白教程】---第3节

ue-vben-admin 与.net core 结合实例 这里计划使用.net core 作为后端 。目标&#xff1a;打造好看 易用 开箱即用 的netcore一体化框架。Vue Vben Admin For NetCore 取命 hcrain-vvadmin 我不是前端人员 但有时开发还是要写一些界面。 之前使用layui是时候 狠心升级下了。 …

kubesphere和k8s的使用分享

文章目录 什么是kubernetesKubernetes的部分核心概念互式可视化管理平台与kubernetes的关系市面是常见的kubernetes管理平台 什么是kubesphereKubesphere默认安装的组件Kubesphere涉及的服务组件kubesphere的安装Kubesphere相关的内容 什么是kubernetes 就在这场因“容器”而起…

React16源码: React中的update和updateQueue的源码实现

React中的update和updateQueue 1 &#xff09;概述 在 ReactDOM.render 过程中&#xff0c;还需要创建一个 update 对象update 用于记录组件状态的改变的一个对象&#xff0c;它存放于Fiber对象的 updateQueue 中updateQueue&#xff0c;它是一个单向链表的结构&#xff0c;一…

性能优化--实战利用arthas排查java服务cpu占用过高的问题

使用jps -l查看目前的java应用进程 启动arthas&#xff0c;选择需要监控的进程 dashboar查看该应用整体情况 使用thread命令&#xff0c;查看占用cpu过高的几个线程ID 然后使用thread 线程ID查看具体线程在执行哪些内容&#xff0c;可以看到对应的类和方法 正在上传… 重…

Guava:Ordering 排序工具

简介 排序器 Ordering 是 Guava流畅风格比较器 Comparator 的实现&#xff0c;它可以用来为构建复杂的比较器&#xff0c;以完成集合排序的功能。 从实现上说&#xff0c;Ordering 实例就是一个特殊的 Comparator 实例。Ordering 把很多基于 Comparator 的静态方法&#xff0…

OpenWrt智能路由器Wan PPPoE拨号配置方法

OpenWrt智能路由器的wan PPPoE拨号配置方法和我们常见的不太一样, 需要先找到wan网卡,然后将协议切换为 PPPoE然后才能看到输入上网账号和密码的地方. 首先登录路由器 http://openwrt.lan/ 然后找到 Network --> Interfaces 这里会显示你当前的路由器的所有接口, 选择 …

WPS通配符匹配数字

1.WPS通配符[36][0-9]{3} 这个正则表达式 [36][0-9]{3} 的含义如下&#xff1a; [36]&#xff1a;表示匹配数字 3 或者数字 6 中的任意一个字符。[0-9]&#xff1a;代表匹配任意一个数字字符&#xff08;0 到 9&#xff09;。{3}&#xff1a;表示前面的表达式&#xff08;即 …

【Machine Learning】Supervised Learning

本笔记基于清华大学《机器学习》的课程讲义监督学习相关部分&#xff0c;基本为笔者在考试前一两天所作的Cheat Sheet。内容较多&#xff0c;并不详细&#xff0c;主要作为复习和记忆的资料。 Linear Regression Perceptron f ( x ) s i g n ( w ⊤ x b ) f(x)sign(w^\top x…

MySQL8.0 升级

将 MySQL8.0.30 升级到 MySQL8.0.32 备份旧数据 rootLAPTOP-FPIQJ438:/data/backup# xtrabackup --backup --userroot --password123456 --socket/tmp/mysql.sock --target-dir/data/backup/ 2024-01-08T16:46:38.98768708:00 0 [Note] [MY-011825] [Xtrabackup] recognized s…

CPU控制的独立式键盘扫描实验

#include<reg51.h> //包含51单片机寄存器定义的头文件 sbit S1P1^4; //将S1位定义为P1.4引脚 sbit S2P1^5; //将S2位定义为P1.5引脚 sbit S3P1^6; //将S3位定义为P1.6引脚 sbit S4P1^7; //将S4位定义为P1.7引脚 unsigned char keyval; /…

连接服务器Mysql出现“Host ‘xxx‘ is not allowed to connect to this MySQL server“解决方法

远程连接提示&#xff1a;Host xxx is not allowed to connect to this MySQL server。是mysql未开启mysql远程访问权限导致。 登录mysql&#xff0c;发现出现了 Access denied for user ‘root’ T’localhost (using password: YES) 此时先找到my.cnf文件,使用命令mysql --…

http跟https有什么区别?

HTTPS和HTTP的概念&#xff1a; HTTP&#xff1a;是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准&#xff08;TCP&#xff09;&#xff0c;用于从WWW服务器传输超文本到本地浏览器的传输协议&#xff0c;它可以使浏览器更加高效&am…

智慧灌溉解决方案(基于物联网的智能灌溉系统)

​ 详情&#xff1a;智慧水务数字孪生安全监测解决方案提供商-星创 (key-iot.com.cn) 随着农业IOT的快速发展,智慧灌溉正成为提高农业水资源利用效率,实现精准灌溉的重要技术手段。完整的智慧灌溉系统由实地各类传感设备以及后台管理软件平台组成,可以实现对整个灌区的监测和精…

python(17)--文件的输入/输出

前言 在Python中&#xff0c;文件文本操作是非常重要的&#xff0c;主要有以下几个原因&#xff1a; 数据持久性&#xff1a;当你需要长期存储数据&#xff0c;如用户的个人信息、交易记录或数据库元数据等&#xff0c;将数据保存在文件中是一种常见的方法。文件系统提供了持…

非线性最小二乘问题的数值方法 —— 从高斯-牛顿法到列文伯格-马夸尔特法 (I)

Title: 非线性最小二乘问题的数值方法 —— 从高斯-牛顿法到列文伯格-马夸尔特法 (I) 文章目录 前言I. 从高斯-牛顿法II. 到阻尼高斯-牛顿法III. 再到列文伯格-马夸尔特法1. 列文伯格-马夸尔特法的由来2. 列文伯格-马夸尔特法的说明说明一. 迭代方向说明二. 近似于带权重的梯度…

步进电机介绍

一、什么是步进电机&#xff1a; 步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号&#xff0c;转子就转动一个角度或前进一步&#xff0c;其输出的角位移或线位移与输入的脉冲数成正比&#xff0c;转速与脉冲频率成正比。因此&#xff0c;步…

通付盾受邀出席2024安全市场年度大会,荣获“数字安全产业杰出贡献奖”!

1月5日&#xff0c;由国内数字产业独立的第三方调研咨询机构数世咨询主办&#xff0c;以“数字安全&#xff0c;未来可期”为主题的2024安全市场年度大会在北京举办。来自国内网络安全厂商300多人以线上线下方式参加本次大会&#xff0c;通过4个多小时高能演讲&#xff0c;聚焦…

线性代数_同济第七版

contents 前言第1章 行列式1.1 二阶与三阶行列式1.1.1 二元线性方程组与二阶行列所式1.1.2 三阶行列式 1.2 全排列和对换1.2.1 排列及其逆序数1.2.2 对换 1.3 n 阶行列式的定义1.4 行列式的性质1.5 行列式按行&#xff08;列&#xff09;展开1.5.1 引理1.5.2 定理1.5.3 推论 * …