题目要求:

分析:

  • 把一个一个字符以整数的形式来进行输出,需要考虑相互转化的问题
  • 不能使用库函数!!!
  • 首尾会有空格(进行去空格操作,可以减少不必要的判断)
  • 区分正负正数
  • 结果可能会越界,题目给的是Integer类型,当超过最大范围或者小于最小范围,有不同同的结果输出
  • 不是有效转换要和越界区分开来,当首个字符是字母时或者字符数组的长度为0时,属于无效转换需要返回0

具体解题思路,代码注释全有(几乎每一行都进行了说明) 

class Solution {public int strToInt(String str) {//去掉首尾的空格char[] arr1 = str.trim().toCharArray();//如果字符数组的长度为0时,没办法转化,直接返回0if(arr1.length == 0){return 0;}//记录符号位 (默认是正数,若是负数将sign置为-1)int sign = 1;//默认是负数,字符数组的1号位置开始遍历,若是正数,将i置为0int i = 1;//判断第一个位置//是负号就将sign置为-1,并且不用更改其实判断位置iif(arr1[0] == '-'){sign = -1;}//如果不是正号也不是负号就从0号位置开始//有正号和没有正号不影响符号位,但是影响起始判断位置if(arr1[0] != '+' && arr1[0] != '-'){i = 0;}//定义一个值,来进行判断(判断条件时会解释)int value = Integer.MAX_VALUE / 10;//记录返回值int result = 0;for(int j = i;j < arr1.length;j++){//如果字符大于ascii码表中的范围说明是字母直接跳出if(arr1[j] > '9' || arr1[j] < '0'){break;}/*1.到这一步时,起码证明arr1[1]这是一个数字2.result > value 时,我们还没进行扩大倍数的运算,但是他已经比value大了,做完扩大倍数运算肯定会越界3.当result == value时,不一定会越界,所以取决于后面的个位,如果个位大于Integer最大范围的个位时,那就一定会越界4.为什么result == value时不一定越界?后续运算是 result * 10那么此时做完运算后,等于又回到了和value相等的情况,而不是Integer的最大范围所在的那个值,因此,越界与否完全取决于个位情况*/if(result > value || (result == value && arr1[j] > '7')){//在这里返回的结果不是不能不能有效运算,而是已经越界,不能返回0//需进行两步:1.如果sign == 1,说明时正数,返回最大范围//           2.如果不是,那说明是负数,返回最小范围就可以了return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE ; }/*1.result每更新时在前面的基础上* 10,就相当于把上一次的计算结果扩大了10倍后面的每次做加法时,加上去的永远是个位2.不能直接进行char和int类型的转化,在ascii码表上的1并不是int的1因此借助char类型之间的减法可以将其转化为int(arr1[j]- '0')代表着 '?' - '0',可以理解为我们将'0'当做理想的0*/result = result * 10 + (arr1[j] - '0');}//将符号位与结果结合,正数等于没有做变化,若负数,将等于将这个正数转为其相反数return sign * result;}
}

把字符串转换成整数(最详细解答)相关推荐

  1. 程序员面试题精选100题(17)-把字符串转换成整数[算法]

    题目:输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程 ...

  2. 2019-02-26-算法-进化(字符串转换成整数)

    题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则 ...

  3. 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...

    点击专辑上方"蓝字"关注我吧 题目难度: 中等 原题链接[1] 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ ...

  4. 49.把字符串转换成整数

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  5. oracle 转化为整数,字符串转换成整数——从源码学习

    字符串转换成整数:输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345. 在笔试面试中,atoi 即「字符串转换成整数」是一个经典问题了 ...

  6. 将十六进制的字符串转换成整数

    #include "stdafx.h" #include<stdio.h> #include<string.h>/*将大写字母转换成小写字母*/ int t ...

  7. python 字符串转换成整数

    | String to Int 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个 ...

  8. 判断字符为空_49. 把字符串转换成整数(剑指offer)

    49. 把字符串转换成整数 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0. 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输 ...

  9. 【Java】 剑指offer(67) 把字符串转换成整数

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...

  10. leetcode —— 面试题67. 把字符串转换成整数

    写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到 ...

最新文章

  1. 深度学习中的卷积网络简介
  2. MVC 中的Model对象
  3. IL 汇编学习笔记(三)
  4. [Part 3]API对接,这些坑你一定掉过!
  5. vue底部跳转_Vue中底部tabBar切换及跳转
  6. 读Pyqt4教程,带你入门Pyqt4 _007
  7. 自动驾驶感知-车道线系列(三)——霍夫变换
  8. SqlServer2005基于已有表创建分区
  9. 常用html元素的取值和赋值方法总结
  10. 软件的黑盒和白盒分析方法
  11. QT找不到python27.dll或python36.dll解决办法
  12. Java 二分排序法
  13. word向下箭头符替换和打印,去掉多余换行
  14. python爬网站图片教程_Python超简单的爬取网站中图片
  15. iOS 开发AVFoundation系统原生二维码扫描实现
  16. 智商黑洞(门萨Mensa测试)11
  17. 362 种材质的 IOR(Index Of Refraction,折射索引) 列表
  18. 关于报错: output or inout port “seven_tube_sel_n“must be connected to a structural net expression
  19. 进阶面试的必看的ORM架构之 ORM简介
  20. 苹果iPhone 8或被阻击!

热门文章

  1. 系统学习IT技术的方法与实践
  2. 嵌入式方案设计文档该怎么写?
  3. php下划线长度如何改变,如何制作固定长度下划线(输入文字而长度不变)
  4. 河北省职称计算机35题,河北省2012年职称计算机考试练习题:EXCEL
  5. 网络面试题:什么是 TCP/IP?
  6. IDEA启动Tomcat端口被占用问题
  7. ceph文件服务器,Ceph分布式存储实战(6)——Ceph存储配置(CephFS的挂载)
  8. javafx_scenebuilder-2_0-windows.msi 百度云盘下载
  9. DNS原理总结及其解析过程详解
  10. 物联网IOT选型wifi路由模块串口透传不得不知的秘密