代码随想录算法训练营29期Day25|LeetCode 216,17

文档讲解:组合总和III  电话号码的字母组合

216.组合总和III

题目链接:https://leetcode.cn/problems/combination-sum-iii/description/

思路:

        本题目与LeetCode 77差不多,都是要找出k个数来使其等于指定的数字n。不过这次数字只有1-9,且每个数字只允许用一次,所以我觉得反而变简单了。

        我们要在9个数中枚举出k个数并检验其和是否为目标值,我用的是依旧如下思路:

        每次枚举一个数,在1-9中从小到大枚举,因此递归边界条件为:枚举到第k+1个数时,判断这k个数的和是否为目标值n,如果是,则将枚举出的k个数加入到答案数组中,然后回溯,如果不是,直接回溯即可。

        那么我们枚举过程中如何做呢?因为我们按照从小到大枚举,所以第一个数从1开始枚举,每个数从上一个数加一再开始枚举,这就剪枝掉部分左边界了。那么右边界是不是也能剪枝呢?答案是可以,我们可以思考,第一个数有必要枚举到9吗,很明显没有必要,因为如果第一个数枚举到9,后面(k-1)个数就没有数字填了。因此每个位置的数字最多填到 n-(k-位置)+1,就是说第一个数的右边界要保证后面剩(k-1)个数,第二个数右边界保证后面剩(n-2)个数,后面以此类推。

        上面的剪枝用来剪掉左右边界,很容易想到。但还有一个剪枝也很容易想到,就是我们枚举到当前位置,发现现在的数字之和已经超过目标值n了,那我们也不用再向下递归了,因为再递归下去值一定不符合要求,直接回溯即可。

        有上面两个剪枝,就过啦!

核心代码:

class Solution {
private:vector<vector<int>> ans;vector<int> nums;int kum;void dfs(int x,int sum){if(sum>0) return;if(x==kum){if(sum==0) ans.push_back(nums);return;}for(int i=nums[x-1]+1;i<=9-(kum-(x+1));i++){nums.push_back(i);dfs(x+1,sum+i);nums.pop_back();}}
public:vector<vector<int>> combinationSum3(int k, int n) {kum=k;for(int i=1;i<=9-k+1;i++){nums.push_back(i);dfs(1,i-n);nums.pop_back();}return ans;}
};

17.电话号码的字母组合

题目链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/

思路:

       本题目其实就是要求我们对字符串中的数字进行替换,按照九宫格键盘来,2替换成a或b或c,诸如此类。

        刚开始我是想写一个字典的,标识下每个数字能换成哪些字母,然后搜索原字符串中的数字,按照字典中的依次替换就行了。这个方法肯定是能过的,但我字典写到一半不想写了,嫌长嫌麻烦,我就想找个其他方法。

        观察得知,每个数字能替换的字母是按照26个字母的顺序来得,且都只能替换三个字母(7和9是例外,能替换四个字母),那我只要知道每个数字能替换第几个到第几个字母,再用a的assic码去算不就得了吗?

        很容易我们就能发现,每个数字可替换的字母从第几个开始=(数字-2)*3。比方说2从第0个开始(我把a视为第0个字母,符合计算机特性),3从第3个开始。这个规律一直到8才被打破,因为7能替换四个字母,因此对8和9来说,可替换的字母从第几个开始=(数字-2)*3+1。

        那可替换的字母到第几个结束呢?很简单,用上面计算出的第几个开始的数字加上2就行了,因为每个数字只能替换三个字母嘛,特判一下7和9,不是加2而是加3即可。

        我们现在知道每个数字可替换的字母了,那我们搜索原字符串即可,根据每一位的数字去换相应的字符,每替换结束一次就把替换完成的字符串加到答案数组中,搜索完成后所有的情况也就都枚举完成了。

        因为这次搜索中的替换每个替换都是必要的,所以也不用考虑剪枝。

核心代码:

class Solution {
private:vector<string> ans;vector<int> nums;int n;void dfs(int x,string t){if(x==n){if(t!="") ans.push_back(t);return ;}int l,r;l=(nums[x]-2)*3;if(nums[x]>7) l++;r=l+2;if(nums[x]==7||nums[x]==9) r++;while(l<=r) {dfs(x+1,t+(char)('a'+l));l++;}}
public:vector<string> letterCombinations(string digits) {n=digits.length();for(int i=0;i<n;i++) nums.push_back(digits[i]-'0');if(digits!="") dfs(0,"");return ans;}
};

今日总结

        今日学习时长2h,题目不算难,基本都是暴力,主要是要会在暴力搜索的基础上剪枝,很明显没必要接着搜索的情况舍去就行了。

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

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

相关文章

人工智能在游戏中的角色:从玩家到创造者

目录 AI的发展历程Python中的AI游戏玩家实现未来的展望结论 人工智能&#xff08;AI&#xff09;已经从简单的游戏对手发展到游戏设计和体验的创造者。在游戏领域&#xff0c;AI的应用不再局限于与人类玩家的对抗&#xff0c;而是扩展到游戏内容的生成、游戏测试、玩家体验的个…

详解Redisson

第1章&#xff1a;Redisson简介 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Redisson&#xff0c;Redisson不只是简单地对Redis进行了封装&#xff0c;它还提供了一系列高级的分布式Java数据结构&#xff0c;像是分布式锁、原子长整型这种。 首先&#xff0c;Redi…

centos 安装rabbitmq集群

当然&#xff0c;我会提供一个更加详细的步骤指南&#xff0c;帮助你在三台 CentOS 服务器上搭建 RabbitMQ 集群。这些服务器的 IP 地址分别为 10.206.0.4、10.206.0.8 和 10.206.0.13。 步骤 1: 安装 Erlang RabbitMQ 需要 Erlang 运行环境。在每台服务器上执行以下步骤&…

AutoDL——终端训练神经网络模型(忽略本地问题)

前言&#xff1a; 本人之前分享过一篇文章&#xff1a;使用pycharm连接远程GPU训练神经网络模型&#xff08;超详细&#xff01;&#xff09;&#xff0c;其中详细介绍了如何利用pycharm连接AutoDL算力云平台租用的GPU服务器训练网络模型。但有些小伙伴可能会因为一些原因而导…

Linux-nginx(安装配置nginx、配置反向代理、Nginx配置负载均衡、动静分离)

关于代理 正向代理: 客户明确知道自己访问的网站是什么 隐藏客户端的信息 目录 关于代理 一、Nginx的安装与配置 1、安装依赖 2、安装nginx &#xff08;1&#xff09;上传压缩包到目录 /usr/nginx里面 &#xff08;2&#xff09;解压文件 &#xff08;3&#xff09…

数据结构概述

一、概述 是计算机的一门基础学科 研究数据在计算机中进行组织和存储,使我们可以高效的获取数据和修改数据 分类 线性结构:数组、队列、栈、链表、哈希表... 树型结构:二叉树、二分搜索树、AVL树、红黑树、堆、Tire、线段树、并查集... 图结构:邻接矩阵、邻接表 二、基本…

c++IO类库

c对IO流的操作必须使用特定的类对象进行操作。 上图就是c中相关IO操作的类封装&#xff0c; ios_base: 是最基本的类&#xff0c;存放IO流的基本信息 ios: ios类是ios_base的子类。是相应的IO流的基类 Istream,ostream: 这两个类都是ios的子类&#xff0c;分别是输…

基于YOLOv8的学生课堂行为检测,引入BRA注意力和Shape IoU改进提升检测能力

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;介绍了学生课堂行为检测&#xff0c;并使用YOLOv8进行训练模型&#xff0c;以及引入BRA注意力和最新的Shape IoU提升检测能力 1.SCB介绍 摘要&#xff1a;利用深度学习方法自动检测学生的课堂行为是分析学生课堂表…

protobuf-Java使用.md

protobuf 环境配置 1、安装编译器 下载地址 直接解压缩。 2、配置环境变量 环境变量Path 中增加安装目录的路径 3、检查是否配置成功 protoc Usage: protoc [OPTION] PROTO_FILES Parse PROTO_FILES and generate output based on the options given:-IPATH, --proto_pa…

etcd安装

1、单节点部署 Install | etcd 1.1、安装 # centos7环境安装etcd # # 下载etcd wget https://github.com/etcd-io/etcd/releases/download/v3.5.11/etcd-v3.5.11-linux-amd64.tar.gz# 解压 tar -xf etcd-v3.5.11-linux-amd64.tar.gz# 进入 etcd-v3.5.11-linux-amd64目录 cd etc…

cmake-动态库和静态库及使用OpenCV第三方库

文章目录 静态库准备的文件CMakeLists文件使用静态库 动态库准备的文件CMakeLists文件使用动态库 使用OpenCV库 项目中会有单个源文件构建的多个可执行文件的可能。项目中有多个源文件&#xff0c;通常分布在不同子目录中。这种实践有助于项目的源代码结构&#xff0c;而且支持…

RPA与ChatGPT的融合:智能化流程的未来

RPA&#xff08;Robotic Process Automation&#xff09;是一种利用软件机器人模拟人类操作的技术&#xff0c;可以实现对各种业务流程的自动化执行。ChatGPT是一种基于深度学习的自然语言生成模型&#xff0c;可以根据给定的上下文生成流畅、连贯、有逻辑的文本。RPA与ChatGPT…

【Oracle】如何给物化视图分区

文章目录 【Oracle】如何给物化视图分区给物化视图进行分区的例 【声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 收集Oracle数据库内存相关的信息 【Oracle】ORA-32017和ORA-00384错误处理 【Oracle】设置…

《WebKit 技术内幕》之五(2): HTML解释器和DOM 模型

2.HTML 解释器 2.1 解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。 这一过程中&#xff0c;WebKit 内部对网页内容在各个阶段的结构表示。 WebKit 中这一过程如下&#xff1a;首先是字节流&#xff0c;经过解码之…

某马头条——day07

APP端搜索 搭建ES环境 docker pull elasticsearch:7.4.0 docker run -id --name elasticsearch -d --restartalways -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.typesingle-node" elasticsear…

Qt 鼠标进入离开事件

文章目录 1. 通过自定义控件实现1.1 添加自定义控件类LabelX 2. 通过事件过滤器实现2.1 添加一个QLabel2.2 为QLabel安装事件过滤器2.3 重写eventFilter 函数 QEvent::Enter ​ 鼠标进入事件&#xff0c;当鼠标进入到窗口/控件内部时&#xff0c;触发该事件&#xff0c;它对应的…

如何通过frp、geoserver发布家里电脑的空间数据教程

如何通过家里电脑的geoserver发布空间数据的教程 简介 大家好&#xff0c;我是锐多宝&#xff0c;最近我在开发一个新网站的时候遇到一个需求&#xff0c;这里记录一下以帮助需要用到的网友。 我的需求是&#xff1a;用户通过网站前端上传空间数据后&#xff0c;即可在前端展…

视频监控需求记录

记录一下最近要做的需求&#xff0c;我个人任务还是稍微比较复杂的 需求&#xff1a;需要实现一个视频实时监控、视频回放、视频设备管理&#xff0c;以上都是与组织架构有关 大概的界面长这个样子 听着需求好像很简单&#xff0c;但是~我们需要在一个界面上显示两个厂商的视…

第四十周:文献阅读+GAN

目录 摘要 Abstract 文献阅读&#xff1a;结合小波变换和主成分分析的长短期记忆神经网络深度学习在城市日需水量预测中的应用 现有问题 创新点 方法论 PCA&#xff08;主要成分分析法&#xff09; DWT&#xff08;离散小波变换&#xff09; DWT-PCA-LSTM模型 研究实…

【Docker】在Windows操作系统安装Docker前配置环境

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…