剑指 Offer 67. 把字符串转换成整数

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

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

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

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

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

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

说明:

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

示例 1:

输入: “42”
输出: 42
示例 2:

输入: " -42"
输出: -42
解释: 第一个非空白字符为 ‘-’, 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:

输入: “4193 with words”
输出: 4193
解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。
示例 4:

输入: “words and 987”
输出: 0
解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。
因此无法执行有效的转换。
示例 5:

输入: “-91283472332”
输出: -2147483648
解释: 数字 “-91283472332” 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。

image.png

解题思路

  1. 首先把字符串前面的所有空格跳过
  2. 判断第一个非空格的字符,只有3种合法的情况,其他非法情况均返回0;
    • 数字
  3. 把连续的数字部分提取出来,为了避免溢出,使用long记录数字,当大于整形最大值或者小于整形最小值时,直接返回

代码

class Solution {public int strToInt(String str) {int cur=0;while (cur<str.length()&&str.charAt(cur)==' ')cur++;if (cur<str.length()&&str.charAt(cur)=='-'){long pre=0;cur++;while (cur<str.length()&&Character.isDigit(str.charAt(cur))){pre*=10;pre-=str.charAt(cur)-'0';if (pre<Integer.MIN_VALUE)return Integer.MIN_VALUE;cur++;}if (pre<Integer.MIN_VALUE)return Integer.MIN_VALUE;return (int)pre;}else if(cur<str.length()&&(Character.isDigit(str.charAt(cur))||str.charAt(cur)=='+')){if(str.charAt(cur)=='+')cur++;long pre=0;while (cur<str.length()&&Character.isDigit(str.charAt(cur))){pre*=10;pre+=str.charAt(cur)-'0';if (pre>Integer.MAX_VALUE)return Integer.MAX_VALUE;cur++;}if (pre>Integer.MAX_VALUE)return Integer.MAX_VALUE;return (int)pre;}return 0;}
}

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

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

相关文章

4.RabbitMQ Linux安装

这里使用的Linux是CentOS6.2 将/etc/yum.repo.d/目录下的所有repo文件删除 先下载epel源 # wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo 修改epel-erlang.repo文件&#xff0c;如下图 添加CentOS 的下载源…

二、数据库设计与操作

一、 数据库设计仿QQ数据库一共包括5张数据表&#xff0c;每张数据表结构如下&#xff1a;1、 tb_User&#xff08;用户信息表&#xff09;这张表主要用来存储用户的好友关系与信息字段名数据类型是否Null值默认值绑定描述IDint否用户账号PwdVarchar(50)否用户密码Frie…

剑指 Offer 36. 二叉搜索树与双向链表

输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点&#xff0c;只能调整树中节点指针的指向。 为了让您更好地理解问题&#xff0c;以下面的二叉搜索树为例&#xff1a; 我们希望将这个二叉搜索树转化为双向循环链表。链表…

1736. 替换隐藏数字得到的最晚时间

给你一个字符串 time &#xff0c;格式为 hh:mm&#xff08;小时&#xff1a;分钟&#xff09;&#xff0c;其中某几位数字被隐藏&#xff08;用 ? 表示&#xff09;。 有效的时间为 00:00 到 23:59 之间的所有时间&#xff0c;包括 00:00 和 23:59 。 替换 time 中隐藏的数…

十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

Scrapy框架安装 1、首先&#xff0c;终端执行命令升级pip: python -m pip install --upgrade pip2、安装&#xff0c;wheel(建议网络安装) pip install wheel3、安装&#xff0c;lxml(建议下载安装)4、安装&#xff0c;Twisted(建议下载安装)5、安装&#xff0c;Scrapy(建议网络…

阿里与珠海横琴新区达成战略合作,阿里云助力打造横琴智能岛

5月17日&#xff0c;阿里巴巴集团、蚂蚁金服集团与珠海横琴新区管理委员会签署战略合作协议&#xff0c;三方将围绕云计算、政务民生服务、城市治理、电子商务等领域展开深入合作&#xff0c;推动横琴产业发展&#xff0c;共同建设新型智慧城市。 &#xff08;阿里巴巴集团、蚂…

chrome 开发工具_我最喜欢的Chrome开发工具提示和技巧

chrome 开发工具Chrome Developer Tools are a super powerful suite of tools for developing web applications. They can do so much, from very basic operations like traversing the DOM, to checking out network requests or even profiling your applications perform…

三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

信号一般使用信号分发器dispatcher.connect()&#xff0c;来设置信号&#xff0c;和信号触发函数&#xff0c;当捕获到信号时执行一个函数 dispatcher.connect()信号分发器&#xff0c;第一个参数信号触发函数&#xff0c;第二个参数是触发信号&#xff0c; 以下是各种信号 sig…

敏捷管理之绩效考核方案

前段时间&#xff0c;公司签了年终奖确认。觉得公司发放年终奖完全是凭主观发放&#xff0c;没有事实依据&#xff0c;由此产生了对如何发放年终奖的一些想法。 奖金发放作为激励员工最直接的手段&#xff0c;往往也是让管理人员最难抉择的&#xff0c;而且很多公司&#xff0c…

记一个蒟蒻的绝望

感觉现在…… 怎么讲&#xff0c;心挺冷的。 今天一月五号了。距离省选&#xff0c;时间好短啊。 我还有那么多东西不懂。甚至听都没听说过。 等到真正去省选的时候&#xff0c;我可能跟现在一样&#xff0c;什么都不会。 我的名字能不能被看到都不知道。哈&#xff0c;还进队呢…

671. 二叉树中第二小的节点

给定一个非空特殊的二叉树&#xff0c;每个节点都是正数&#xff0c;并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话&#xff0c;那么该节点的值等于两个子节点中较小的一个。 更正式地说&#xff0c;root.val min(root.left.val, root.right.val) 总…

Android基础夯实--你了解Handler有多少?

概述 对于刚入门的同学来说&#xff0c;往往都会对Handler比较迷茫&#xff0c;到底Handler是个什么样的东西。当然&#xff0c;可能对于一些有工作经验的工程师来说&#xff0c;他们也不一定能很准确地描述&#xff0c;我们来看下API的介绍。 Handler是用来结合线程的消息队列…

sketch-a-net_Adobe XD,Sketch,Figma,InVision-如何在2020年选择最佳设计软件

sketch-a-netComparing Adobe XD vs Sketch vs Figma vs InVision studio is a very common topic among designers who are looking for the best design software. 在寻求最佳设计软件的设计师中&#xff0c;比较Adobe XD&#xff0c;Sketch&#xff0c;Figma和InVision Stud…

Nancy简单实战之NancyMusicStore(四):实现购物车

原文:Nancy简单实战之NancyMusicStore(四)&#xff1a;实现购物车前言 上一篇&#xff0c;我们完成了商品的详情和商品的管理&#xff0c;这一篇我们来完成最后的一个购物车功能。 购物车&#xff0c;不外乎这几个功能&#xff1a;添加商品到购物车&#xff0c;删除购物车中的商…

《七步掌握业务分析》读书笔记六

分析技术和呈现格式 词汇表 强有力沟通的一个重要内容是一致地使用术语和惯用语。每次谈话都涉及对术语的共同理解。 工作流图&#xff08;也称为流程图、UNL活动图和过程图&#xff09; 工作流程把一个或多个业务过程的细节可视化地呈现出来&#xff0c;以澄清理解或提出过程改…

个人作业——软件工程实践总结作业

一、请回望暑假时的第一次作业&#xff0c;你对于软件工程课程的想象 1&#xff09;对比开篇博客你对课程目标和期待&#xff0c;“希望通过实践锻炼&#xff0c;增强计算机专业的能力和就业竞争力”&#xff0c;对比目前的所学所练所得&#xff0c;在哪些方面达到了你的期待和…

(转)在阿里,我们如何管理代码分支?

阿里妹导读&#xff1a;代码分支模式的选择并没有绝对的正确和错误之分&#xff0c;关键是与项目的规模和发布节奏相匹配。阿里协同研发平台在经过众多实践历练后&#xff0c;总结出了一套独创的分支管理方法&#xff1a;AoneFlow&#xff0c;通过兼备灵活高效与简单实用的流程…

WIN10系统 截图或者某些程序时屏幕会自动放大怎么办

右击这个应用程序&#xff0c;兼容性&#xff0c;以兼容模式运行&#xff0c;同时勾选高DPI设置时禁止显示缩放即可

hugo 能做web开发吗_如何自托管Hugo Web应用

hugo 能做web开发吗After hosting with Netlify for a few years, I decided to head back to self hosting. There are a few reasons for that, but the main reasoning was that I had more control over how things worked. 在Netlify托管了几年之后&#xff0c;我决定回到…

5187. 收集足够苹果的最小花园周长

给你一个用无限二维网格表示的花园&#xff0c;每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 &#xff0c;且每条边都与两条坐标轴之一平行。 给你一个整数 neededApples &#xff0c…