【一刷《剑指Offer》】面试题 49(案例):把字符串转换成整数

力扣对应题目链接:8. 字符串转换整数 (atoi) - 力扣(LeetCode)


一、《剑指Offer》对应内容


二、分析题目

根据题意,有以下四种字符需要考虑:

  1. 首部空格: 删除之即可。
  2. 符号位: 三种情况,即 ''+''、''−''、''无符号"。新建一个变量保存符号位,返回前判断正负即可。
  3. 非数字字符: 遇到首个非数字的字符时,应立即返回。
  4. 数字字符:
  • 字符转数字: “此数字的 ASCII 码” 与 “ 0 的 ASCII 码” 相减即可。
  • 数字拼接: 若从左向右遍历数字,设当前位字符为 ch,当前位数字为 x,数字结果为 res,则数字拼接公式为:

res = 10×res + x

x = ascii(ch)−ascii(′0′)

数字越界处理:

题目要求返回的数值范围应在 [−2^31, 2^(31−1)] ,因此需要考虑数字越界问题。而由于题目指出 环境只能存储 32 位大小的有符号整数 ,因此判断数字越界时,要始终保持 res 在 int 类型的取值范围内。

在每轮数字拼接前,判断 res 在此轮拼接后是否超过 INT_MAX(2147483647),若超过则加上符号位直接返回。

  1. res > INT_MAX / 10         情况一:执行拼接 10×res ≥ 2147483650 越界
  2. res = INT_MAX / 10, x>7  情况二:拼接后是 2147483648 或 2147483649 越界


三、代码

class Solution {
public:int myAtoi(string s) {int n=s.size();if(n==0) return 0;int res=0;int sign=1;int i=0;while(s[i]==' '){i++;if(i==n) return 0;}if(s[i]=='-'){sign=-1;i++;}else if(s[i]=='+') i++;for(int j=i; j<n; j++){if(s[j]<'0' || s[j]>'9') break;if(res>INT_MAX/10 || (res==INT_MAX/10 && s[j]>'7')){if(sign==1) return INT_MAX;else return INT_MIN;}res=res*10+(s[j]-'0');}return sign*res;}
};

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

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

相关文章

计算机网络知识点面试总结3

#来自ウルトラマンゼロ&#xff08;赛罗&#xff09; 1 数据链路层功能 数据链路层在物理层提供的服务的基础上向网络层提供服务&#xff0c;其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层&#xff0c;其主要作用是加强物理层传输原始比特流的功能。…

【Day12】登录认证、异常处理

1 登录 先创建一个新的 controller 层&#xff1a;LoginController RestController public class LoginController {Autowiredprivate EmpService empService;// 注入PostMapping("/login")public Result login(RequestBody Emp emp) { // 包装对象Emp e empServic…

PyTorch的自动微分模块【含梯度基本数学原理详解】

文章目录 1、简介1.1、基本概念1.2、基本原理1.2.1、自动微分1.2.2、梯度1.2.3、梯度求导1.2.4、梯度下降法1.2.5、张量梯度举例 1.3、Autograd的高级功能 2、梯度基本计算2.1、单标量梯度2.2、单向量梯度的计算2.3、多标量梯度计算2.4、多向量梯度计算 3、控制梯度计算4、累计…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.3 管理信息系统(MIS)-解读

系统架构设计师教程 第3章 信息系统基础知识-3.3 管理信息系统(MIS) 3.3.1 管理信息系统的概念3.3.1.1 部件组成3.3.1.2 结构分类3.3.1.2.1 开环结构3.3.1.2.2 闭环结构3.3.1.3 金字塔结构3.3.2 管理信息系统的功能3.3.3 管理信息系统的组成3.3.3.1 销售市场子系统3.3.3.2…

x86+FPGA+AI:地铁全线刷脸过闸,地铁智慧票务系统专用计算机

地铁全线刷脸过闸 | 可提供地铁智慧票务系统专用计算机 近日&#xff0c;成都地铁在全线网地铁车站正式上线“智慧票务”系统&#xff0c;全通道无接触式“戴口罩刷脸乘车”的通行方式优化了乘客出行效率、降低了疫情交叉感染风险&#xff0c;因此备受好评&#xff01; 01、地铁…

Unity UGUI 之 Image和Rawimage

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Image是什么 Unity - 手册&#xff1a;图像 精灵格式是什么&#xff1f; 1.2重要参数 …

Linux的热插拔UDEV机制和守护进程

目录 一、Linux的热插拔UDEV机制 二、守护进程 2.1 守护进程概念和基本特点&#xff1a; 2.2 显示进程信息&#xff1a; 2.3 守护进程和后台进程的区别&#xff1a; 2.4 创建守护进程的步骤和守护进程的特征&#xff1a; 2.4.1 创建守护进程的步骤&#xff1a; 2.4.2 守…

MyBatis-Plus的几种常见用法

MyBatis-Plus 提供了丰富的高级用法&#xff0c;可以简化开发&#xff0c;提高效率。以下是一些常见的可能会被忽略的用法示例。 1. 乐观锁 乐观锁用于避免在并发环境下数据更新冲突。MyBatis-Plus 通过注解和版本字段实现乐观锁。 示例&#xff1a; 在实体类中添加版本字段…

系统级联调联试方案模板

目录 系统级联调联试方案 1. 引言 2. 准备工作 3. 测试策略 4. 测试案例设计 5. 测试执行 6. 缺陷管理 7. 风险评估 8. 测试总结 9. 后续行动 10. 附录 联调联试&#xff08;Integration and Testing&#xff09;是指在系统开发过程中&#xff0c;将各个子系统或模块…

查找多个关键词在单元格出现的位置(find函数)并且统计(count函数)和显示(lookup函数)对应的关键词

目的:从交易用途中统计E列中的村名出现的次数,并且分离出村和村小组。其中F列是所有村的名称(不重复),F列是所有小组的名称 1.使用find函数查询关键词在单元格中对应的位置 在G4单元格中输入如下公式:参数解释说明: Find_text:要查找的字符串即目标字符。 Within_text …

内网隧道——隧道技术基础

文章目录 一、正向连接与反向连接1.1 正向连接1.2 反向连接 二、端口转发三、端口映射四、端口复用五、代理和隧道的区别六、常见隧道穿透分类 环境&#xff1a; kali&#xff1a;192.168.92.6&#xff0c;MSF v6.3.25 win7&#xff1a;192.168.92.7 一、正向连接与反向连接 1…

信息增益与基尼指数:决策树分裂准则的比较

信息增益与基尼指数&#xff1a;决策树分裂准则的比较 介绍 决策树是一种常用的机器学习算法&#xff0c;广泛应用于分类和回归问题。决策树通过不断地将数据集划分成更小的子集来构建模型。在构建过程中&#xff0c;选择最佳分裂点是至关重要的一步。信息增益和基尼指数是决…

安装gymnasium,利用经典的环境进行RL

gym是强化学习的一个经典环境&#xff0c;已经更新成了gymnasium 基本的安装按照https://gymnasium.farama.org/environments/atari/adventure/ pip install gymnasium pip install gymnasium[atari] pip install gymnasium[all]不同的环境需要如下配置&#xff1a; box-2d …

androidkiller重编译apk失败的问题

androidkiller重编译apk失败 参考&#xff1a; https://blog.csdn.net/qq_38393271/article/details/127057187 https://blog.csdn.net/hkz0704/article/details/132855098 已解决&#xff1a;“apktool” W: invalid resource directory name:XXX\res navigation 关键是编译…

在 Git 中把文件恢复到之前的提交

原文链接&#xff1a;https://www.delftstack.com/zh/howto/git/git-revert-file-to-previous-commit/ 假设我们的项目 Git 仓库中有一个名为 README.md 的文件。我们可以使用 git log 命令浏览该文件的提交历史记录&#xff0c;如下所示。 $ git log --oneline README.md 81…

【Pytorch】RNN for Name Classification

参考学习来自&#xff1a; https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.htmlRNN完成姓名分类https://download.pytorch.org/tutorial/data.zip 导入库 import glob # 用于查找符合规则的文件名 import os import unicodedata import stri…

交换机(Switches)和桥(Bridges)的区别

交换机&#xff08;Switches&#xff09;和桥接器&#xff08;Bridges&#xff09;在网络和通信领域中都起着重要作用&#xff0c;它们有一些共同点&#xff0c;但也有一些显著的区别&#xff1a; 工作层次&#xff1a; 桥接器&#xff08;Bridges&#xff09;&#xff1a;桥接…

计算机网络参考模型与5G协议

目录 OSI七层参考模型OSI模型vsTCP/IP模型TCP/IP协议族的组成 OSI七层参考模型 分层功能应用层网络服务与最终用户的一个接口表示层数据的表示,安全,压缩会话层建立,管理,终止会话传输层定义传输数据的协议端口号,以及流控和差错校验网络层进行逻辑地址寻址,实现不同网路之间的…

【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口

目录 ​编辑 QT窗口 窗口分类 菜单栏 创建菜单栏&#xff0c;菜单&#xff0c;菜单项 菜单栏 菜单 菜单项 添加分割线 添加槽函数 ​编辑 添加快捷键 工具栏 停靠位置 浮动属性 移动属性 添加快捷项 ​编辑 状态栏 ​编辑 添加标签 添加进度表 ​编辑…

科研绘图系列:R语言火山图(volcano plot)

介绍 火山图(Volcano Plot),也称为火山图分析,是一种在生物信息学和基因组学中常用的图形表示方法,主要用于展示基因表达数据的差异。它通常用于基因表达微阵列或RNA测序数据的可视化,帮助研究人员识别在不同条件下表达差异显著的基因。 火山图的基本构成 X轴:通常表示…