C++:OJ练习(每日练习系列)

编程题:

题一:字符串相加

415. 字符串相加 - 力扣(LeetCode)

思路一:

第一步:需要获取字符串的两个尾节点下标

第二步:创建用于记录进位数、获得的字符串的变量

第三步:只要有进位或还有数没有加完继续循环利用三目运算:有符号+符号,无符号+0

第四步:最后将得到的字符串逆置,就是需要的结果。

class Solution {
public:string addStrings(string num1, string num2) {//获取字符串的尾节点int it1 = num1.size() - 1;int it2 = num2.size() - 1;//记录进位数int count = 0;//获得的字符串string s1 = "";//有进位或还有数没有加完while(it1 >= 0 || it2 >= 0 || count != 0){//三目运算:有符号+符号,无符号+0int x = it1 >= 0 ? num1[it1] - '0' : 0;int y = it2 >= 0 ? num2[it2] - '0' : 0;int n = x + y + count;int num = n % 10;count = n / 10;s1.push_back(num + '0');--it1;--it2;}//得到的是逆置的字符串reverse(s1.begin(),s1.end());return s1;}
};

题二:验证回文串

125. 验证回文串 - 力扣(LeetCode)

思路一:

第一步:遍历字符串将大写改小写并删除非字母和数字的字符

第二步:判断对称比较字符是否相等

class Solution {
public:bool isPalindrome(string s) {//遍历字符串将大写改小写并删除非字母和数字的字符for(int i = 0; i < s.size();i++){s[i] = tolower(s[i]);if((s[i] < 'a' || s[i] > 'z') && (s[i] < '0' || s[i] > '9')){s.erase(i,1);i--;}}//对称比较字符是否相等int left = 0;int right = s.size() - 1;while(left < right){if(s[left] != s[right]){return false;}left++;right--;}return true;}
};

题三:反转字符串

541. 反转字符串 II - 力扣(LeetCode)

思路一:

第一步:分别创建记录起始位置和末尾位置的节点

第二步:只要后面还有字符就继续执行循环1.计数2k个字符,就反转这2k字符中的前k个字符;2.字符小于2k但大于或等于k个,则反转前k个字符;3.剩余字符少于k个,将剩余字符全部反转。

特别注意:reverse是逆置左闭右开的区间!!!

class Solution {
public:string reverseStr(string s, int k) {//分别创建记录起始位置和末尾位置的节点string::iterator cur = s.begin();string::iterator tail = s.end();//只要后面还有字符就继续执行while(cur != tail){//计数2k 个字符,就反转这2k字符中的前k个字符if(cur + 2*k <= tail){//需要注意reverse是左闭右开的区间reverse(cur,cur + k );cur += 2*k;}//字符小于2k但大于或等于k个,则反转前k个字符else if(cur + k <= tail){reverse(cur,cur + k );break;}//剩余字符少于k个,将剩余字符全部反转else{reverse(cur,tail);break;}}return s;}
};

思路二:

        反转每个下标从 2k 的倍数开始的,长度为 k 的子串。若该子串长度不足 k,则反转整个子串。

class Solution {
public:string reverseStr(string s, int k) {int n = s.length();for (int i = 0; i < n; i += 2 * k) {reverse(s.begin() + i, s.begin() + min(i + k, n));}return s;}
};

题四:反转字符串的单词

557. 反转字符串中的单词 III - 力扣(LeetCode)

思路一:

第一步:定义变量left、right从第一个字符开始,以及tail来记录字符串长度

第二步:如果没有超过字符串长度就继续循环1.定位一个单词的区间、2。逆置(我们这里用的是下标访问,无法使用reverse来进行逆置)、3.再排除空格的影响;

void my_reverse(string& s1,int left,int right)
{while(left < right){swap(s1[left],s1[right]);++left;--right;}
}
class Solution {
public:string reverseWords(string s) {int left = 0;int right = 0;int tail = s.size();//没有超过字符串长度就循环while(right < tail){//定位一个单词的区间while(s[right] != ' ' && s[right] != '\0'){++right;}//逆置my_reverse(s,left,right-1);//排除空格的影响while(s[right] == ' ')++right;left = right;}return s;}
};

题五:字符串相乘

43. 字符串相乘 - 力扣(LeetCode)

思路一:

第一步创建:1.得到最后的结果的s1、2.count用于记录进位、enter用于记录进行了几次乘加;

第二步:while循环中1.n1做为被乘数,n2做为乘数,tmp用于记录当前的乘积2.再内置一个while循环实现乘法,3.将所得结果逆置,4.对每一次的乘积进行当前结果求和(这里直接在题意字符串相加的基础上缩小了相加的范围实现了乘加);

第三步:最后:判断:如果字符串全为‘0’,则返回“0”,否则正常输出计算所得的字符串。

class Solution {
public:
string addStrings(string num1, string num2,int enter) {//获取字符串的尾节点int it1 = num1.size() - 1 -enter;int it2 = num2.size() - 1;//记录进位数int count = 0;//获得的字符串string s1 = "";//有进位或还有数没有加完while(enter--){s1.push_back(num1[it1+enter+1]);}while(it1 >= 0 || it2 >= 0 || count != 0){//三目运算:有符号+符号,无符号+0int x = it1 >= 0 ? num1[it1] - '0' : 0;int y = it2 >= 0 ? num2[it2] - '0' : 0;int n = x + y + count;int num = n % 10;count = n / 10;s1.push_back(num + '0');--it1;--it2;}//得到的是逆置的字符串reverse(s1.begin(),s1.end());return s1;}string multiply(string num1, string num2) {//得到最后的结果的s1string s1;//count用于记录进位int count = 0;//enter用于记录进行了几次乘加int enter = 0;//n1做为被乘数int n1 = num1.size() - 1;while(0 <= n1){//n2做为乘数int n2 = num2.size() - 1;//tmp用于记录当前的乘积string tmp;//实现乘法while(0 <= n2 || count != 0){int x = n1 >= 0 ? num1[n1] - '0' : 0;int y = n2 >= 0 ? num2[n2] - '0' : 0;int num = x * y + count;count = num / 10;tmp.push_back((num % 10) + '0');--n2;}//所得结果逆置reverse(tmp.begin(),tmp.end());//对每一次的乘积进行当前结果求和s1 = addStrings(s1,tmp,enter);++enter;--n1;}//判断:如果字符串全为‘0’,则返回“0”int nn = s1.size() ;while(nn--){if(s1[nn] - '0' != 0){return s1;}}return "0";}};

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                              

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

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

相关文章

nginx部署多个vue或react项目

下载nginx(tar.gz) nginx: download(官方地址) 部署nginx # 进入nginx压缩包所在目录 cd /usr/nginx# 解压 tar -zxvf nginx-1.25.3.tar.gz# 安装nginx的相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel# 生成Makefile可编译文件 cd /usr/ng…

SQL Sever 基础知识 - 数据查询

SQL Sever 基础知识 - 一、查询数据 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - …

富必达API:一站式无代码开发集成电商平台、CRM和营销系统

一站式无代码开发的连接解决方案 电子商务、客户服务系统以及其它商业应用&#xff0c;是现代企业运营的重要部分。然而&#xff0c;将这些系统进行有效的整合往往需要复杂的API开发&#xff0c;这对很多企业来说是一个巨大的挑战。富必达API以其一站式的无代码开发解决方案&a…

注解方式优雅的实现Redisson分布式锁

1.前言 随着微服务的快速推进&#xff0c;分布式架构也得到蓬勃的发展&#xff0c;那么如何保证多进程之间的并发则成为需要考虑的问题。因为服务是分布式部署模式&#xff0c;本地锁Reentrantlock和Synchnorized就无法使用了&#xff0c;当然很多同学脱口而出的基于Redis的se…

C语言--每日选择题--Day31

第一题 1. 下面程序 i 的值为&#xff08;&#xff09; int main() {int i 10;int j 0;if (j 0)i; elsei--; return 0; } A&#xff1a;11 B&#xff1a;9 答案及解析 B if语句中的条件判断为赋值语句的时候&#xff0c;因为赋值语句的返回值是右操作数&#xff1b; …

【猜数字游戏】用wxPython实现:基本的游戏框架 + 简单的图形用户界面

【猜数字游戏】 写在最前面猜数字游戏 实现【猜数字游戏】安装wxPython全部代码代码解析1. 初始化界面2. 生成随机数3. 处理猜测4. 特殊功能5. 分数计算 游戏小程序呈现结语 写在最前面 看到了一个比较有意思的问题 https://ask.csdn.net/questions/8038039 猜数字游戏 在这…

Linux系统iptables

目录 一. 防火墙简介 1. 防火墙定义 2. 防火墙分类 ①. 网络层防火墙 ②. 应用层防火墙 二. iptables 1. iptables定义 2. iptables组成 ①. 规则表 ②. 规则链 3. iptables格式 ①. 管理选项 ②. 匹配条件 ③. 控制类型 四. 案例说明 1. 查看规则表 2. 增加新…

Node——Node.js简介

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;它能够让JavaScript脚本运行在服务端&#xff0c;这使得JavaScript成为与PHP、Python等服务端语言平起平坐的脚本语言。 1、认识Node.js Node.js是当今网站开发中非常流行的一种技术&#xff0c;它以简单易…

防爆执法记录仪、防爆智能安全帽助力海上钻井平台远程可视化监管平台建设

推动远程安全管理&#xff0c;海上钻井"视"界拓新—防爆执法记录仪与防爆智能安全帽的创新应用 在海上钻井作业领域&#xff0c;安全生产一直是萦绕在每一个业者心头的重大课题。由于环境的恶劣及作业的特殊性&#xff0c;一旦发生安全事故&#xff0c;其后果往往极…

SQL Sever 基础知识 - 数据排序

SQL Sever 基础知识 - 二 、数据排序 二 、对数据进行排序第1节 ORDER BY 子句简介第2节 ORDER BY 子句示例2.1 按一列升序对结果集进行排序2.2 按一列降序对结果集进行排序2.3 按多列对结果集排序2.4 按多列对结果集不同排序2.5 按不在选择列表中的列对结果集进行排序2.6 按表…

深入学习redis-基于Jedis通过客户端操作Redis

目录 redis客户端&#xff08;JAVA&#xff09; 配置 引入依赖 建立连接 常用命令实现 get/set exists/del keys expire和ttl type 字符串&#xff08;String&#xff09; mget和mset getrange和setrange append incr和decr 列表&#xff08;list&#xff09; …

STM32F407-14.3.7-01PWM输入模式

PWM 输入模式 此模式是输入捕获模式的一个特例。其实现步骤与输入捕获模式基本相同&#xff0c;仅存在以下不同之处&#xff1a; 例如&#xff0c;可通过以下步骤对应用于 TI1① 的 PWM 的周期&#xff08;位于 TIMx_CCR1⑨ 寄存器中&#xff09;和占空 比&#xff08;位于 …

Echarts 柱状图添加标记 最大值 最小值 平均值

标记 最大值 最小值 series: [//图表配置项 如大小&#xff0c;图表类型{name: 图例,type: bar,//图表类型data: [{value: 500,time: 2012-11-12},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}] …

深入了解Rabbit加密技术:原理、实现与应用

一、引言 在信息时代&#xff0c;数据安全愈发受到重视&#xff0c;加密技术作为保障信息安全的核心手段&#xff0c;得到了广泛的研究与应用。Rabbit加密技术作为一种新型加密方法&#xff0c;具有较高的安全性和便捷性。本文将对Rabbit加密技术进行深入探讨&#xff0c;分析…

【深度学习】概率图模型(一)概率图模型理论简介

文章目录 一、概率图模型1. 联合概率表2. 条件独立性假设3. 三个基本问题 二、模型表示1. 有向图模型&#xff08;贝叶斯网络&#xff09;2. 无向图模型&#xff08;马尔可夫网络&#xff09; 三、学习四、推断 概率图模型&#xff08;Probabilistic Graphical Model&#xff0…

EUREKA: HUMAN-LEVEL REWARD DESIGN VIACODING LARGE LANGUAGE MODELS

目录 一、论文速读 1.1 摘要 1.2 论文概要总结 相关工作 主要贡献 论文主要方法 实验数据 未来研究方向 二、论文精度 2.1 论文试图解决什么问题&#xff1f; 2.2 论文中提到的解决方案之关键是什么&#xff1f; 2.3 用于定量评估的数据集是什么&#xff1f;代码有…

【raect.js + hooks】useRef 搭配 Houdini 创造 useRipple

水波纹点击特效 really cool&#xff0c;实现水波纹的方案也有很多&#xff0c;笔者经常使用 material 组件&#xff0c;非常喜欢 mui 中的 ripple&#xff0c;他家的 ripple 特效就是通过 css Houdini 实现的。 今天&#xff0c;我们将复刻一个 ripple&#xff0c;并封装成 ho…

论文阅读——DINOv

首先是关于给了提示然后做分割的一些方法的总结&#xff1a; 左边一列是prompt类型&#xff0c;右边一列是使用各个类型的prompt的模型。这些模型有分为两大类&#xff1a;Generic和Refer&#xff0c;通用分割和参考分割。Generic seg 是分割和提示语义概念一样的所有的物体&am…

UI 自动化测试框架:PO模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…

Java多线程-第20章

Java多线程-第20章 1.创建线程 Java是一种支持多线程编程的编程语言。多线程是指在同一程序中同时执行多个独立任务的能力。在Java中&#xff0c;线程是一种轻量级的子进程&#xff0c;它是程序中的最小执行单元。Java的多线程编程可以通过两种方式实现&#xff1a;继承Threa…