难度:中等
频次: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】

代码

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)相关推荐

  1. [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)

    [DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...

  2. 32位有符号整数_[LeetCode] 8. 字符串转换整数 (atoi)

    题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  3. Leetcode 8. 字符串转换整数 (atoi) (每日一题 20210615)

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

  4. Leetcode 08. 字符串转换整数 (atoi)

    原题链接 1.字符  0~~~~~9 分别对应整数 48~~~~~57 2.先过滤空白 3.确定前面所带的符号 4. long long res = 0;     res = res * 10 + s ...

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

    https://leetcode-cn.com/problems/string-to-integer-atoi/ 解决方案 class Solution {public int myAtoi(Stri ...

  6. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  7. ⭐算法入门⭐《模拟》中等01 —— LeetCode 8. 字符串转换整数

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   实现一个myAtoi( ...

  8. c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)

    " 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法.主要内容如下: 题目 示例 解题 " 01 - 题目 请你来实现一个 atoi 函数,使其能将字符 ...

  9. 8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)

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

最新文章

  1. swift SDWebImage 与 UIButton 出现的细节bug 不显示
  2. 纯原生仿ES6的Object.assign,实现深度合并对象
  3. eShopOnContainers 知多少[11]:服务间通信之gRPC
  4. 7-28 求矩阵的局部极大值 (15 分)
  5. H3C 路由过滤与路由引入
  6. SpringBoot整合定时任务(在线Cron表达式生成器)
  7. 华硕笔记本计算机名称,华硕笔记本电脑有哪些型号 华硕笔记本电脑型号大全...
  8. avr 74hc595驱动数码管动态显示c语言例程,ATmega8驱动74HC595程序
  9. linux搭建WebSphere
  10. 【毕业N年系列】 毕业第三年
  11. abs函数c语言std,c++ 在std :: abs函数上
  12. 教你如何设计ASP网上考试系统
  13. springbus类是做什么用的_SpringCloud-Bus组件的使用
  14. 多用途手机登录页面模板
  15. 单烤fpu和双烤_“教科书”式工业设计?ROG幻15双烤拆机,散热堆料够足
  16. linux非yum安装svn,linux安装svn(yum安装)
  17. 第二次热带近岸出海记录
  18. 【大白菜】介绍几个维护U盘安全的技巧
  19. wince 读写 ini 文件 操作 MFC
  20. 软件测试之---测试设计方法

热门文章

  1. JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数...
  2. 获得MFC窗口其它类指针的方法
  3. bd3.2 Python高级
  4. 在应用程序中加入.net脚本
  5. 年度回顾:2018年的AI/ML惊喜及预测19年的走势(一)...
  6. centos7下安装pip以及mysql等软件
  7. Uploadify v3.2.1
  8. Python常用网页字符串处理技巧
  9. mysql 输出当前月所有日期与对应的星期
  10. svn还原文件中去掉已经删除的文件