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

闲聊 闲聊 1077 人阅读 | 0 人回复

<
标题问题疑息
145002zh6imyi7yugh1uhb.jpg

解题思路
  那是一讲中等题,需求判定战思索的工具许多。我们逐个枚举出去。
1、需求先来除尾位的空字符,那个很简单,用trim()办法便好。
2、假设碰到的第一个非空字符为‘-’大概‘+’时,把前面的数字毗连起去。
3、假设碰到的第一个非空字符没有是数字或正、背号。便阐明长短法的间接返回0
4、越界成绩,标题问题给的状况是int范例的数字其数值范畴为 [−231, 231 − 1],假设越界了便需求返回最年夜的int值大概最小的int值。
代码战具体正文以下
  1. class Solution{
  2.     public int strToInt(String str) {
  3.         //起首来除str尾位过剩的空格,再转成字符数组
  4.         char []array=str.trim().toCharArray();
  5.         //如果str少度分歧法,间接返回0
  6.         if(array.length==0){
  7.             return  0;
  8.         }
  9.         //sign为标记位,1为正,-1为背, i代表数组array从那边开端遍历
  10.         int sign=1;
  11.         //res终极数字的成果
  12.         int res=0;
  13.         int i=1;
  14.         //设置一个限定值,由于要先正在遍历的时分判定res是否是越界了,最初才背res赋值
  15.         int limit=Integer.MAX_VALUE/10;
  16.         //假如array[0] == &#39;-&#39;便阐明是背数把sign改成-1;
  17.         if(array[0]==&#39;-&#39;){
  18.             sign=-1;
  19.         }
  20.         //假如也没有是+那要遍历的判定了,以是让i=0,从第一个开端遍历判定
  21.         else if(array[0]!=&#39;+&#39;){
  22.             i=0;
  23.         }
  24.         for (int j = i; j <array.length ; j++) {
  25.             //判定当前字符j是否是数字,没有是便间接 退出,
  26.             if(array[j]>&#39;9&#39; || array[j]<&#39;0&#39;){
  27.                 break;
  28.             }
  29.           //那个时分曾经碰到没有是数字的字符了,便需求判定之前的数组有无越界
  30.           //假如res即是214748364了而且最初一名数比7借年夜.
  31.           //那末它乘10以后,必然比intMax借要年夜,便越界了,需求返回intMax
  32.          //假如第一个标记是个‘-’,也是到最初return res*sign的时分才减上背号的,前里的一概当整数除理
  33.          //假如第一个标记是‘-’了,那末sign便会是-1,它如果借越界了便会走到上面的return里,返回最小的谁人值
  34.             if(res>limit ||res==limit&&array[j]>&#39;7&#39;){
  35.                 return  sign==1? Integer.MAX_VALUE:Integer.MIN_VALUE;
  36.             }
  37.             //res出到一个数字便多一个位数,以是每主要成10,再减当前的字符-‘0’
  38.             res = res * 10 + (array[j] - &#39;0&#39;);
  39.         }
  40.         //给成果带上+-号
  41.         return  res*sign;
  42.     }
  43. }
复造代码
假设觉得没有错的话,能够看看我的其他题解
怎样把i am a student顺置成student a am i?面试题顺置字符串解说
三种办法任君选择 LeetCode_136只呈现一次的数字
甚么?静态计划10止供出持续子数组的最年夜战 剑指offer-42解说
剑指 Offer 39. 数组中呈现次数超越一半的数字 俭朴易懂14止弄定 。大家皆可会
两叉树的层序遍历道理+LeetCode实题操练
LeetCode 24:两两交流链表中的节面,1662. 查抄两个字符串数组能否相称
LeetCode 第两十一题
剑指 Offer 58 - II. 左扭转字符串的三种解法一同看看吧!!
字符串“aabcccccaaa”紧缩成“a2b1c5a3“借要返回更小的?力扣面试题 01.06. 字符串紧缩解说

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则