leetcode 8. 字符串转换整数 (atoi)
难度:中等
频次:75
题目:
请你来实现一个 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 。
返回整数作为最终结果。
注意:
本题中的空白字符只包括空格字符 ’ ’ 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
解题思路:按提示遍历
- 首先丢弃无用前导空格 [题目的提示]
- 可能会有string都是空格的情况,需要排除
- 接着读取符号位字符 [题目的提示]
- 有符号位的时候需要进行的处理,标志位+1 -1
- 没有±号的时候不用处理,标志位起始值就为1
- 读取数字 [题目的提示]
- 用一个while判断i和n的大小即可
- 如果不是数字,直接退出
- 那么剩下的情况就是数字
- 预判这轮加上后是是否大于Integer的取值,这一步不能简单用res>Integer.MAX_VALUE,因为res如果超过最大值,就会变成复数了。这是这道题的精髓,不让用double,不然就可以直接比较。
- 预判结果超出界限(拿最大值举例子2147483647)只有两种情况
- 1.当之前的res>214748364,接下来的那一位无论是哪个数字,都会超出界限
- 2.当之前的res==214748364,接下来的那以为必须要大于7时才会超出界限【这里负数不一样,-2147483648,最后一位必须大于8】
- 预判结果超出界限(拿最大值举例子2147483647)只有两种情况
- 预判这轮加上后是是否大于Integer的取值,这一步不能简单用res>Integer.MAX_VALUE,因为res如果超过最大值,就会变成复数了。这是这道题的精髓,不让用double,不然就可以直接比较。
代码
class Solution {public int myAtoi(String s) {//当前下标int i=0;int res=0;int n=s.length();char[] charArray=s.toCharArray();//1.丢弃无用的前导空格while(i<n && charArray[i]==' '){i++;}//======需要排除全部都是' '的情况//下标=n说明char数组已经遍历完了,那就没有了if(i==n) return 0;//2.检查该字符是+号还是-号int sign=1;//==有效位数if(charArray[i]=='-'){sign=-1;i++;}else if(charArray[i]=='+'){i++;}//判断是否跳出循环while(i<n){if(charArray[i]>'9'||charArray[i]<'0') break;int max=Integer.MAX_VALUE;int min=Integer.MIN_VALUE;//3.预判是否在范围内//因为在int的大小有限,Integer.MAX_VALUE+1就会变成Integer.MIN_VALUE//所以得预判,即超过max=2147483647的有两种情况//第一种:之前的res比 214748364(max/10)要大,那无论一下位是什么都会超出界限//第二种:之前的res刚好跟214748364(max/10)相等,那下一位只有超过7才会超出界限if (res > max / 10 || (res == max / 10 && (charArray[i]-'0') > max % 10)) {return max;}if (res < min / 10 || (res == min / 10 && (charArray[i]- '0') > -(min % 10))) {return min;}//负号要每一次都×尾数res=10*res+sign*(charArray[i]-'0');i++;}return res;}
}
leetcode 8. 字符串转换整数 (atoi)相关推荐
- [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)
[DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...
- 32位有符号整数_[LeetCode] 8. 字符串转换整数 (atoi)
题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- Leetcode 8. 字符串转换整数 (atoi) (每日一题 20210615)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数).函数 myAtoi(string s) 的算法如下:读入 ...
- Leetcode 08. 字符串转换整数 (atoi)
原题链接 1.字符 0~~~~~9 分别对应整数 48~~~~~57 2.先过滤空白 3.确定前面所带的符号 4. long long res = 0; res = res * 10 + s ...
- LeetCode 8 字符串转换整数 (atoi)
https://leetcode-cn.com/problems/string-to-integer-atoi/ 解决方案 class Solution {public int myAtoi(Stri ...
- Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...
- ⭐算法入门⭐《模拟》中等01 —— LeetCode 8. 字符串转换整数
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 实现一个myAtoi( ...
- c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)
" 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法.主要内容如下: 题目 示例 解题 " 01 - 题目 请你来实现一个 atoi 函数,使其能将字符 ...
- 8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)
8. 字符串转换整数 (atoi): 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAto ...
最新文章
- swift SDWebImage 与 UIButton 出现的细节bug 不显示
- 纯原生仿ES6的Object.assign,实现深度合并对象
- eShopOnContainers 知多少[11]:服务间通信之gRPC
- 7-28 求矩阵的局部极大值 (15 分)
- H3C 路由过滤与路由引入
- SpringBoot整合定时任务(在线Cron表达式生成器)
- 华硕笔记本计算机名称,华硕笔记本电脑有哪些型号 华硕笔记本电脑型号大全...
- avr 74hc595驱动数码管动态显示c语言例程,ATmega8驱动74HC595程序
- linux搭建WebSphere
- 【毕业N年系列】 毕业第三年
- abs函数c语言std,c++ 在std :: abs函数上
- 教你如何设计ASP网上考试系统
- springbus类是做什么用的_SpringCloud-Bus组件的使用
- 多用途手机登录页面模板
- 单烤fpu和双烤_“教科书”式工业设计?ROG幻15双烤拆机,散热堆料够足
- linux非yum安装svn,linux安装svn(yum安装)
- 第二次热带近岸出海记录
- 【大白菜】介绍几个维护U盘安全的技巧
- wince 读写 ini 文件 操作 MFC
- 软件测试之---测试设计方法
热门文章
- JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数...
- 获得MFC窗口其它类指针的方法
- bd3.2 Python高级
- 在应用程序中加入.net脚本
- 年度回顾:2018年的AI/ML惊喜及预测19年的走势(一)...
- centos7下安装pip以及mysql等软件
- Uploadify v3.2.1
- Python常用网页字符串处理技巧
- mysql 输出当前月所有日期与对应的星期
- svn还原文件中去掉已经删除的文件