比较简单的题目,但是还是提交了好几遍才A掉一一!
需要考虑的:
(1)字符串前面的空格 trim()或者while()
(2)正负符号
(3)只取最前面的数字字符,一旦出现非数字字符后面即使有数字也不考虑了
(4)空字符串
(5)溢出:最大数最小数两种
遗忘了一种情况 ,出现了下面的错误。解决方法是:
加上|| (sum>=1000000000)
Submission Result: Wrong Answer
Input: | " -11919730356x" |
Output: | 965171532 |
Expected: | -2147483648 |
正确代码如下:
public class Solution { public int atoi(String str) { // Note: The Solution object is instantiated only once and is reused by each test case. int sum=0,temp=0; int i=0; boolean negtive=false; boolean over=false; final int INT_MAX=2147483647; final int INT_MIN=-2147483648; str=str.trim();
//while (i < str.length() && str.charAt(i) == ' ') i++; if(str.length()==0) return 0; if(str.charAt(i)=='-'){ negtive=true; i++; } if(str.charAt(i)=='+'){ i++; } while(i<str.length() && str.charAt(i) >= '0' && str.charAt(i) <= '9'){ temp = str.charAt(i)-'0'; if (sum >= 214748364) { if ((!negtive && temp>=7) || negtive && temp>=8 || (sum>=1000000000)) { over = true; break; } } sum=sum*10+temp; i++; } if(over==true && negtive==true) return INT_MIN; if(over==true && negtive==false) return INT_MAX; if(negtive) return -1*sum; else return sum; } }