考虑情况不全面,在LeetCode上一直提交不通过,参考别人的解答方案。
题目要求如下:
1. 首先需要丢弃字符串前面的空格;
2. 然后可能有正负号(注意只取一个,如果有多个正负号,那么说这个字符串是无法转换的,返回0。比如测试用例里就有个“+-2”);
3. 字符串可以包含0~9以外的字符,如果遇到非数字字符,那么只取该字符之前的部分,如“-00123a66”返回为“-123”;
4. 如果超出int的范围,返回边界值(2147483647或-2147483648)。
java实现:
class Solution { public int myAtoi(String str) { //1、null or empty if(str==null||str.length()==0) return 0; //2、whitespaces str=str.trim(); //3、-/+ sign int i=0; boolean positive=true; if(str.charAt(0)=='+') i++; else if(str.charAt(0)=='-'){ i++; positive=false; } //4、calculate real value double tmp=0;//如果是int类型的,当输入时2147483648时,计算会越界 for(;i<str.length();i++){ int digit=str.charAt(i)-'0'; if(digit<0||digit>9){ break; } //5、handle min & max if(positive){ tmp=10*tmp+digit; if(tmp>Integer.MAX_VALUE) return Integer.MAX_VALUE; }else{ tmp=10*tmp-digit; if(tmp<Integer.MIN_VALUE) return Integer.MIN_VALUE; } } int res=(int)tmp; return res; } }