8. 字符串转换整数 (atoi) [2022.10.21]

题目链接:

8. 字符串转换整数 (atoi)

一 题意介绍

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格
检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
返回整数作为最终结果。
注意:

本题中的空白字符只包括空格字符 ' ' 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

class Solution {
public:int myAtoi(string s) {}
};

二 题目解析

首先定义结果 long long res = 0,解析位置下标 k  = 0,数值标志 flag = 1;

为什么使用long long?

相对于int,long long数据范围定义得更广。long long占用8个字节,数据表示范围也从int的[−2^31,2^31−1],升级到[−2^63,2^63−1]。

字符串转换为数字的核心代码 

while(k < res.size() && s[k] >= '0' && s[k] <= '9')
{res = res * 10 + s[k] - '0';k++;
}

在此基础上进行条件的增加与判断

1. 除去前面的空格

while(s[k] == ' ') k++;

2. 对正负号进行处理

if(s[k] == '-')
{flag = -1;k++;
}
else if(s[k] == '+')
{k++;
}

 3. 对越界进行处理

if(res > INT_MAX) return INT_MAX;
if(res < INT_MIN) return INT_MIN;

并对前面的核心代码进行判断,如果出界就跳出循环

三 题目完整代码

class Solution {
public:int myAtoi(string s) {int  k  = 0;   //下标的标志long long res = 0;while(s[k] == ' ') k++;  // 处理前面的空格int flag = 1;if(s[k] == '-'){flag = -1;k++;}else if(s[k] == '+'){k++;} while( k < s.size() && s[k] >='0' && s[k] <= '9'){res = res*10 + s[k] - '0';k++;if(res > INT_MAX) break;}res *= flag;if(res > INT_MAX) return INT_MAX;if(res < INT_MIN) return INT_MIN;return res;}
};

四 复杂度分析

空间复杂度 :O(1)

时间复杂度: O(n)

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

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

相关文章

26. 删除有序数组中的重复项[2022.10.24]

题目链接力扣 难度&#xff1a;简单 一 题目大意 26. 删除有序数组中的重复项给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某…

hibernate jpa_JPA / Hibernate实体状态转换的初学者指南

hibernate jpa介绍 Hibernate将开发人员的思维方式从SQL语句转移到实体状态转换。 一旦由Hibernate主动管理实体&#xff0c;所有更改将自动传播到数据库。 操作域模型实体&#xff08;及其关联&#xff09;比编写和维护SQL语句容易得多。 如果没有ORM工具&#xff0c;则添加新…

STL容器----map

一 基本概念 1. map/multimap map/multimap属于关联式容器&#xff0c;底层结构是用二叉树实现。 其中所有元素都是pair, pair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实值&#xff09;&#xff0…

Spring @RequestParam批注

介绍&#xff1a; Spring RequestParam批注可用于在处理程序方法中提取查询参数。 在本快速教程中&#xff0c;我们将学习其用法。 首先让我们展示一个API&#xff0c;该API返回具有给定名字和年龄的用户列表&#xff1a; RestController public class UserController {...Ge…

win10任务栏怎样居中win10任务栏居中设定教程

win11系统内置任务栏居中的设置项&#xff0c;但是win10系统没有&#xff0c;倘若win10顾客也想让自己的任务栏居中的话&#xff0c;应当怎样设置呢&#xff1f;你先撤销任务栏锁住&#xff0c;随后新建菜单栏。之后选定一个空白文件夹&#xff0c;之后任务栏就会发生两条竖杠&…

java与java ee_RxJava + Java8 + Java EE 7 + Arquillian =幸福

java与java ee微服务是一种体系结构样式&#xff0c;其中每个服务都实现为一个独立的系统。 他们可以使用自己的持久性系统&#xff08;尽管不是强制性的&#xff09;&#xff0c;部署&#xff0c;语言等。 由于系统由一个以上的服务组成&#xff0c;因此每个服务将与其他服务…

【PPT】折线线条怎么画?

大家晚上好~ 今天跟大家分享3种绘制折线线条的方法。在模仿PPT的时候发现没有折线形状&#xff0c;这可怎么好呢&#xff1f; 今天带来了3种快速制作折线线条的方式&#xff0c;让我们一起围观学习吧~ 方法1 形状布尔运算出折线线条 在PPT默认的形状里没有折线&#xff0c;那…

创建通用数组的问题

在这篇文章中&#xff0c;我们将介绍一篇全面的文章&#xff0c;其中介绍了创建通用数组的问题。 Java编程语言于2004年9月在Java 5.0“ Tiger”发行版中添加了泛型。 泛型或类型参数化系统在提供类型安全性的同时扩展了Java现有的类型系统。 1.简介 Java具有Collections Fram…

Citavi阅读PDF文件中目录位置

一般阅读pdf文件&#xff0c;如果文件内内嵌目录数据&#xff0c;可以根据目录&#xff0c;跳转到PDF文件的对应章节。 citavi也不例外 citavi调出目录章节位置如下图所示&#xff1a; 1. 点击左下方的搜索框 2. 点击目录标志 即可调出目录窗口

Ubuntu下命令行解析

Linux命令通常由以下三部分组成&#xff1a;Command [-option] [argument] 其中&#xff0c;命令为程序的名称。选项和参数可以省略 选项中one dash&#xff08;-&#xff09;与two dashes&#xff08;--&#xff09;区别 使用命令时常看到有时候为选项为-&#xff0c;有时候…

使用JMeter进行性能测试

在开发复杂的高可用性软件项目时&#xff0c;性能至关重要。 在当今这样的现代时代尤其如此&#xff0c;除了闪电般的快速访问实时数据之外&#xff0c;其他任何事情都受到惩罚。 当谈论有时需要的大量数据时&#xff0c;这并不总是一件容易的事。 在本文中&#xff0c;我们将…

Unix系统用户下载内容存放位置

1.Unix文件目录含义 首先注意usr 指 Unix System Resource&#xff0c;而不是User 然后通常&#xff1a; /usr/bin下面的都是系统预装的可执行程序&#xff0c;会随着系统升级而改变。 /usr/local/bin目录是给用户放置自己的可执行程序的地方&#xff0c;推荐放在这里&…

Linux depmod功能说明

Linux depmod 命令用于分析可载入模块的相依性。 depmod(depend module)可检测模块的相依性&#xff0c;供modprobe在安装模块时使用。 Linux modprobe命令用于自动处理可载入模块。 modprobe可载入指定的个别模块&#xff0c;或是载入一组相依的模块。modprobe会根据depmod…

jboss eap_带有自定义模块的JBoss EAP上的骆驼

jboss eapApache Camel —最好的开源集成库 Apache Camel是一个很棒的开放源代码集成库&#xff0c;可以用作ESB的主干或在独立的应用程序中进行系统的路由&#xff0c;转换或中介&#xff08;请参阅&#xff1a;集成多个系统&#xff09;。 Camel非常通用&#xff0c;不会迫使…

ubuntu下安装openMPI

首先访问openmpi官网:Openmpi 然后选择Download&#xff0c;进入资源下载页面。选择最新版本的openmpi 如何获得下载链接呢&#xff1f;将鼠标放在openmpi-4.0.5.tar.gz 上右击&#xff0c;然后选择复制链接地址。打开远程命令窗口&#xff0c;进入root或者用户模式。 (1)、下…

前6个最常用的Redis库

Redis目前 是世界上最受欢迎的键值商店&#xff0c; 它通过提供高速和低延迟以及针对应用程序开发人员的灵活功能集&#xff0c;赢得了广泛的采用率 。 Redis是一个内存数据结构存储&#xff0c;用作根据BSD许可分发的数据库&#xff0c;缓存和消息代理 。 许多领先的技术品牌…

拓扑排序算法总结

知识概览 求图的拓扑序是图的宽搜的一个很经典的应用&#xff0c;拓扑序列是针对有向图来说的。 拓扑序列的定义是&#xff1a; 如果说一个点的序列满足对于图中的每条有向边(x, y)&#xff0c;x都出现在y的前面&#xff0c;那就称这个序列是这个图的拓扑序列。 备注&#xff…

Ns3使用MPI加速仿真速度

Ns3中在大规模拓扑仿真中&#xff0c;为加速仿真速度&#xff0c;可以利用MPI工具&#xff0c;实现多进程联合仿真。 linux系统下安装openmpi. 参考链接# ubuntu下安装openMPI成功运行ns-3中的文件 命令1:sudo gedit /etc/profile打开文件&#xff0c;加入ns-3的路径: 最后此文…

代码中 #ifdef注释方法的使用

1 代码中 #ifdef注释方法的使用 #ifdef的使用 #ifdef _XXXX ...程序段1... #else ...程序段2... #endif如果标识符_XXXX已经被#define定义&#xff0c;则编译程序段&#xff11;&#xff0c;否则编译程序段&#xff12;&#xff0e;#else非必须&#xff0c;可不存在程序段&am…

input发送a.jax_JAX-RS 2.0的新功能– @BeanParam批注

input发送a.jax至少可以说JAX-RS很棒&#xff0c;也是我的最爱之一&#xff01; 为什么&#xff1f; 功能丰富 直观&#xff08;因此学习曲线不那么陡峭&#xff09; 易于使用和开发 具有出色的RI – Jersey &#xff0c; RestEasy等 有足够的JAX-RS粉丝可以添加此内容&am…