leetcode 8 String to Integer (atoi)
这道题最重要的是理解题意
对于我这种只会一些肤浅的java知识的菜鸟,根本不知道atoi是什么(尴尬脸)
atoi:
atoi ( ascii to integer)是把字符串转换成整型数的一个函数。
atoi( ) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始转换,而再遇到非数字或字符串结束时结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。
注意:题目中还加了一条,如果超出int型的上下限该输出对应的上限或者下限。
首先理解好题目意思,不要产生误解,这是解好题目的前提。
所以,使用spilt过滤,正则表达式等想法都不对 Σ( ° △ °|||)︴
最后还是逐步处理字符串最实在。注意一些特殊情况:
- “”空串
- “ ”只有空格或Tab的字符串
- “ abc”,“ ab93489”,“ -”,“ -dauhi24”除空格和Tab,只有字母,只有字母数字,只有符号,符号后紧跟字母
- “ -28378abc”,“ -28378abc324”,“ -28378 ”,“ -28378 dua28”符号数字跟字母/字母+其他(数字也没差别)/空格/空格+其他
- “ -0.3”小数
- “2147483648”超上限
- “-2147483649”超下限
“004”数字前有0
最后,附代码:
public int myAtoi(String str) { long result = 0;//用于判断是否超出上下限 int sign = 1; int index = 0; if(str.length()==0) return 0; // if(str.charAt(index)==' ') index++;这样的写法只能去掉一个空格 while(str.charAt(index)==' '||str.charAt(index)==' ') { if(index<str.length()-1) index++;//-1是必要的,解决全空格全Tab问题 else break; } if(str.charAt(index)=='+'||str.charAt(index)=='-'){ sign = str.charAt(index)=='+'?1:-1; index++; } while(index<str.length()){ int digit = str.charAt(index) - '0'; if(digit>9||digit<0) break; result = result*10 + digit; if(result*sign>Integer.MAX_VALUE||result*sign<Integer.MIN_VALUE){ return result*sign>0?Integer.MAX_VALUE:Integer.MIN_VALUE; } index++; } return (int)result*sign; }