题目要求:

分析:

  • 把一个一个字符以整数的形式来进行输出,需要考虑相互转化的问题
  • 不能使用库函数!!!
  • 首尾会有空格(进行去空格操作,可以减少不必要的判断)
  • 区分正负正数
  • 结果可能会越界,题目给的是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. 64位 java 数据类型_全面解析Java支持的数据类型及Java的常量和变量类型
  2. 对抗高并发拯救系统架构,我们并不需要复仇者联盟|深圳活动
  3. 行业研究报告基本分析思路updated with 5c model
  4. 【jetson nano】 aarch64安装pycharm pytorch cuda
  5. antd form rules字数限制_【React】antd的form表单的自定义校验规则的用法
  6. Android调用手机浏览器打开某网页出现异常情况
  7. WordPress百度快速提交插件-加速百度爬虫和收录
  8. android 安装包 权限,确定Android中已安装应用程序使用的权限列表
  9. inotify java maven_inotifywait + rsync 监控文件并同步
  10. B - Cube HDU - 1220 (数学计数)
  11. vCenter 6.0 vsca 安装遇到的一些小问题
  12. 学会这个方法,轻松为PDF文件加密,快来码住
  13. 谷歌金山词霸正式发布--免费午餐越来越多
  14. 基于exosip 编写呼叫流程实例
  15. 校招软件测试面试问题总结
  16. js实现下雪雪花特效
  17. ACM算法训练赛——STL(完结)
  18. fmri优缺点_题集|03 EEG、fMRI、PET等的优缺点;经典条件作用的形成及其规律;中介变量和调节变量及其区别;动机与行为效率的关系...
  19. 【Makefile】strip
  20. Expected required, optional, or repeated.错误解决方法

热门文章

  1. 医药采购之供货商药品目录添加查询
  2. 2016大学生电子设计竞赛赛题分析
  3. java 多个歌曲_java 多个文件合并,多个 MP3 合并,InputStream 合并
  4. 网络安全的昨天、今天、明天
  5. Java中【年(year)和周年(week year)】的区别
  6. java毕业设计健身房课程预约平台(附源码、数据库)
  7. Java基础之设计模式七大原则
  8. 用 PLSQL command Window 执行 .sql 文件
  9. 【选课脚本】用Python网页爬虫来进行选(qiang)课 (更新至v1.0.8)
  10. 华为鸿蒙系统是手机系统吗_如果华为手机搭载了鸿蒙OS,真的会顺利吗?