大家好我是Liyuyue!
本专栏会将本博主刷题历程记录并总结下来,出成讲解的方式供给大家一起学习!
接下来我会讲我刷的LeetCode好题用到的思路、方法分享给大家一起学习,如果大家在看的过程中还有好的方法,可以评论区或者直接找我继续讨论。
如果大家有需要出讲解的题可以给我评论或者私聊我,我帮大家试试水~!给大家一个满意的讲解~!
感谢大家的支持~!
把字符串转换成整数
文章图片
总体概述: 这个题是将字符串转换为整数,但是如果字符串中有非 +/- 以外的符号之间返回0。
文章图片
这句话很重要,读到这句话就可以写起来更加方便。
所以我们只要先看字符串中出现没出现除 +/- 以外的符号,如果出现了之间返回0,如果除 +/- 以外都是数组字符了,那么再将 +/- 加以辨识,然后将剩下的数字串转换为整数,而且还不让使用字符串转换整数的库函数。这种转换的思路我在前几篇博客中应用的很多,想必看过之间前的题很容易直到如何不用字符串转换整数的库函数就可以轻松转换。
思路: 首先我们需要先遍历一遍字符串,如果遍历过程中有除数字以外的字符,直接返回0,而且遍历的时候要从下标为1的位置开始遍历,如果这样会出现一个问题:如果是“a13248567”这样一个字符串呢?
所以我们就先要创建几个变量,一个是begin用来指向下标为0的位置,一个是end用来指向最后一个位置,一个是symbol用来判断如果是 +/- 的话,就让它是1/-1,然后判断第一个字符是不是 +/- ,如果是 +/- 的话,就让begin指向下标为1的位置,如果是 + 的话,symbol就是1,如果是 - 的话,symbol就是-1。
所以这样判断完第一个字符后,begin要么是1要么是0,如果是“a13248567”,第一个字符不是+/-,那就begin从0遍历,因为是字母,直接返回0,如果是“+13248567”,那就begin从1遍历,symbol也就是1,所以直接完成了判断~!
其实上面的逻辑还是比较绕的,如果看到这里都懂了的话,那么恭喜你,你已经会做了,剩下的就是遍历看剩下的有没有字母,有的话就返回0,没有的话就将剩下的字符串转换为整数就完成了~!!!
代码展示:
class Solution {
public:
int StrToInt(string str) {
int begin = 0,end = str.size() - 1;
int symbol = 1;
// 符号标识
if(str[begin] == '+' || str[begin] == '-')
{
if(str[begin] == '-') // 是负号就记录下来u
symbol = -1;
begin = 1;
// 如果是 +/- 就让从1开始
}
for(int i = begin;
i < end ;
i++)
{
if(str[i] > '9' || str[i] < '0') // 现在判断是不是都是数字
return 0;
}
int ret = 0;
// 用来返回的总和
int sum = 0;
// 用来接收转换的
int next = 1;
// 1 -> 10 -> 100 -> ...
while(begin <= end)
{
sum = (str[end--] - '0') * next;
next *= 10;
ret += sum;
}
return ret * symbol;
// 如果symbol是-1就说明是负号
}
};
文章图片
如上就是 把字符串转换成整数 的解析,接下来本专辑会持续更新【刷爆LeetCode】,和大家一起爆扣LeetCode!!!,如果大家喜欢看此文章并且有收获,可以时刻关注我,本专栏持续更新!
【Linux|7.【刷爆LeetCode】把字符串转换成整数(多方法、多思路)】感谢大家观看,感谢大家支持!
推荐阅读
- leetcode|leetcode栈和队列
- docker|k8s搭建EFK日志管理系统
- 运维|Linux的进程控制
- 服务器|Linux中进程间通信
- linux|【Linux】多线程的概念
- vim|linux的基本开发工具(vim,gcc,gdb,make/Makefile)
- 运维|centos8报错(Errors during downloading metadata for repository ‘base‘)
- centos|docker 安装mysql5.7
- linux禁用CPU 禁用cpu内核