【LeetCode-中等】剑指 Offer 67. 把字符串转换成整数(详解)

news2024/11/26 17:45:29

题目

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明:

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例

 

 方法

思路与图片来自:面试题67. 把字符串转换成整数(数字越界处理,清晰图解) - 把字符串转换成整数 - 力扣(LeetCode)

1. 删除首尾空格

2. 符号位用int 存储,如果是‘+’,那就设为1,如果是‘-’,那就设为-1,最后将符号位与数字位相乘即可。

3. 遇到首个非数字位,直接返回

4. 数字位:

        4.1字符转数字: “此数字的 ASCII 码” 与 “ 00 的 ASCII 码” 相减即可;

        4.2 数字拼接: 若从左向右遍历数字,设当前位字符为 c ,当前位数字为 x ,数字结果为 res ,则数字拼接公式为:

 

 数字越界处理

 

 

 代码

class Solution {
    public int strToInt(String str) {
        //1.去首尾空格,转成字符数组
        char[] c = str.trim().toCharArray();
        if(c.length == 0) return 0;
        int res = 0, bndry = Integer.MAX_VALUE / 10;
        int i = 1, sign = 1;
        /**
         *  如果第一个是负号 就让sign = -1
         *  否则如果 既不是正号 也不是负号,那就说明 无符号
         *  无符号的情况 : 从0开始到尾进行扫描
         *  有符号的情况 : 从1开始到尾进行扫描
         */

        if(c[0] == '-') sign = -1;
        else if(c[0] != '+') i = 0;
        //扫描
        for(int j = i; j < c.length; j++) {
            //遇上非数字
            if(c[j] < '0' || c[j] > '9') break;
            //判断是否越界,越界就返回边界值
            if(res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            //不越界就继续拼接
            res = res * 10 + (c[j] - '0');
        }
        //最后将符号和数字拼接起来
        return sign * res;
    }
}

 心得

自己写的时候,没把握住题目的难点,直接就是将字符串分割好之后,直接String类型强制转换成int类型,就返回了,忽略了数字最大的情况,越界的情况,看了题解才知道,原来这道题的难点不在字符串的处理,难点应该是在怎么拼接数字,怎么判断越界。

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

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

相关文章

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图

本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…

7月最新大模型排名!3700道保密试题、20个大模型参与评测|SuperCLUE

7月最新大模型排名&#xff01;3700道保密试题、20个大模型参与评测&#xff5c;SuperCLUE CLUE中文语言理解测评基准 中文通用大模型综合性评测基准SuperCLUE 2023年7月榜单 7月25日&#xff0c;SuperCLUE发布大模型7月榜单。 SuperCLUE: A Benchmark for Foundation Mo…

【TypeScript】类型推断与类型别名的使用方式。

什么是类型推断&#xff1f; 在 TypeScript 中&#xff0c; 如果声明变量时&#xff0c;没有明确的指定类型&#xff0c;那么 TypeScript 会依照类型推论&#xff08;Type Inference&#xff09;的规则推断出一个类型。 以下代码虽然没有明确指定类型&#xff0c;但是会在编译的…

web安全漏洞总结

目录 &#xff08;一&#xff09;网络安全常见漏洞 1、sql注入漏洞 漏洞解释与形成原因 漏洞分类&#xff1a; 漏洞存在常见地方&#xff1a; 漏洞利用: 漏洞防御: 攻击流量特征 绕开waf拦截的常用方法 2、文件上传漏洞 漏洞解释与形成原因&#xff1a; 漏洞利用 漏…

20230720在ubuntu22.04系统下载+解密+合并ts切片的步骤

20230720在ubuntu22.04系统下载解密合并ts切片的步骤 2023/7/20 23:06 1、视频源头&#xff0c;打开时效肯定有时间限制的&#xff01; 【并且不同时间打开&#xff0c;下载链接/参数会有区别的&#xff01;以前的链接就会失效/出错了&#xff01;】 https://app1ce7glfm1187.…

深“扒”云原生高性能分布式文件系统JuiceFS

JuiceFS 是一款面向云原生设计的高性能分布式文件系统&#xff0c;在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性&#xff0c;可将几乎所有对象存储接入本地作为海量本地磁盘使用&#xff0c;亦可同时在跨平台、跨地区的不同主机上挂载读写。 JuiceFS 简介 JuiceFS…

【100天精通python】Day13:面向对象编程_多态和封装,实战模拟电影院的自动售票机选票页面

目录 1 多态&#xff08;Polymorphism&#xff09; 2 封装&#xff08;Encapsulation&#xff09; 3 总结 4 实战&#xff1a;模拟电影院的自动售票机选票页面 在 Python 中&#xff0c;多态和封装是面向对象编程的两个重要概念。 1 多态&#xff08;Polymorphism&#xf…

GoogleLeNet Inception V1

文章目录 Inception V1Inception Modulenative versionInception module with dimensionality reduction1 * 1网络的降维说明 多个Softmax的输出整体结构 GoogleLeNet主要是把深度扩充到了22层&#xff0c;能增加网络深度而不用担心训练精度和梯度消失问题。 总共是提出了4个版…

【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法

文章目录 断码屏驱动补充MX_LCD_Init()驱动初始化失败 断码屏驱动补充 已经有大神写过较详细的教程&#xff1a;https://blog.csdn.net/CSDN_Gao_16/article/details/115463499&#xff0c;但这篇博文仍然比较抽象&#xff0c;我看了好多遍才看明白-_-||&#xff0c;为了节省和…

金融中的数学:贝叶斯公式

1.贝叶斯定理 贝叶斯定理是概率论中的一项重要定理&#xff0c;用于在已知某一事件的条件下&#xff0c;求另一事件发生的概率。它是根据条件概率推导出来的&#xff0c;得名于英国数学家托马斯贝叶斯。 贝叶斯定理可以表示为&#xff1a; 这个式子就是贝叶斯公式&#xff0c…

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目 创建项目时&#xff0c;LabVIEW将显示“创建项目”对话框&#xff0c;以帮助您选择模板或示例项目来作为开发起点。如果要使用您创建的项目作为自定义模板和示例项目&#xff0c;您必须将每个项目的源文件和元数据添加到相应…

算法与数据结构(四)--队列

一.队列的基本概念 队列是另一种特殊的表&#xff0c;这种表只在表首&#xff08;也称为队首&#xff09;进行删除操作&#xff0c;只在表尾进行插入操作。队列的修改是按先进先出的规则进行的&#xff0c;所以队列又称为先进先出表&#xff0c;First In First Out&#xff0c…

高温介电参数测试

高温介电参数测试 在新材料科研领域&#xff0c;高温介电参数的测量是众多高校和研究所经常会面临的问题。精科声学所事业部电子和专业的高温介电系统集成商合作&#xff0c;使用 JKZC-YDZK03A型高温压电阻抗综合分析仪进行配套系统集成&#xff0c;满足客户高温介电测量和曲线…

什么是 web3?

在百度搜索引擎输入 “Web3”、“大厂”。跳出来基本都是这样的标题. 以及如今的互联网行业 “哀鸿遍野”&#xff0c;不仅内卷&#xff0c;还裁员。然后掀起一阵风&#xff0c;猛吹 Web3 的好&#xff0c;数据回归用户……最后再 “威逼利诱” 一下&#xff0c;Web3 就是 20 年…

【业务功能篇50】ObjectMapper-将java对象转为json字符串

ObjectMapper可以实现Java对象和json字符串间互相转换&#xff0c;我们经常用到的是它的Java对象转json字符串功能。 这里目的是 Java对象 json字符串相互转换 api 【json字符串转为Java对象&#xff1a;readValue(json字符串,类.class)】【Java对象转为json字符串&#xff1a…

读kafka生产端源码,窥kafka设计之道(下)

背景 在上一篇文章《读kafka生产端源码&#xff0c;窥kafka设计之道&#xff08;上&#xff09;》 留下了kafka设计上比较优秀的一个点&#xff1b;内存的循环使用。本篇文章准备盘盘它。 好奇 为什么 kafka减少发送消息时向JVM频繁申请内存&#xff0c;就可以降低JVM GC的执…

idea 设置了 vm options后无法启动

今天想扩展ideaj的JVM 设置了 vm options后无法启动 找了很久&#xff0c;重新卸载后安装也没有用 后面直接打开idea的bat文件 找到自己idea使用的.vmoptions文件&#xff0c;我是因为之前idea有缓存&#xff0c;一直用的我修改的文件&#xff0c;后面删了就可以启动了

看了我项目中的商品功能设计,同事也开始悄悄模仿了...

商品功能作为电商系统的核心功能&#xff0c;它的设计可谓是非常重要的。就算不是电商系统中&#xff0c;只要是涉及到需要交易物品的项目&#xff0c;商品功能都具有很好的参考价值。今天就以mall项目中的商品功能为例&#xff0c;来聊聊商品功能的设计与实现。 mall项目简介 …

前端实习第一周周记

第一天 第一天来的时候&#xff0c;十点左右就开始跑代码了&#xff0c;公司发了电脑&#xff0c;但由于自己的电脑环境比较齐全&#xff0c;所以就先用自己的电脑跑的代码。 一共是两个项目&#xff0c;一个pc类似于管理系统&#xff0c;还有一个是微信小程序。 拉代码的过…

3DVR全景旅游,最新数字化智慧文旅

导语&#xff1a; 随着科技的飞速发展&#xff0c;3DVR全景旅游正以其独特的特点和无限的优势&#xff0c;成为当今智慧文旅的领航者。穿戴上VR设备&#xff0c;只需一个轻轻的点击&#xff0c;你将被带入一个全新的数字世界&#xff0c;领略美景、探索奇迹。让我们一起深入了…