虽然是easy,却是比较繁琐的一道题,需要考虑各种边界条件。在WA了好几遍之后,才把各种边界条件给补全。需要考虑到的因素如下:
- 输入不合法字符,非"0-9",对于首位,合法字符还包括"+"和"-"来代表正负号;
- 最前面允许出现很多个空格,即" 56";
- 当中间出现不合法字符,输出该不合法字符前面有效字符,如"+56a123",输出就是56;
- 注意越界的情况。
当注意了上述情况之后,就没有太大问题了:
1 public class Solution { 2 public int myAtoi(String str) { 3 if (str.length() == 0) return 0; 4 int index = 0; 5 //前面是空格的情况 6 while (str.charAt(index) == ' ') index++; 7 char c0 = str.charAt(index++); 8 long num = c0 < '0' || c0 > '9'? 0 : c0 - '0'; 9 int flag = 1; 10 //记录正负号。 11 if (c0 == '-') flag = -1; 12 //判断首位的不合法字符 13 if ((c0 < '0' || c0 > '9') && (c0 != '+'&& c0 != '-')) return 0; 14 for (int i = index; i < str.length(); i++) { 15 char c = str.charAt(i); 16 //判断不合法字符,若不合法,马上返回 17 if (c < '0' || c > '9') { 18 if (flag == -1) num = -num; 19 return (int)num; 20 } 21 num = num * 10 + (c - '0'); 22 //注意越界的情况 23 if (num > 2147483647 && flag == 1) return 2147483647; 24 if (num > 2147483647 && flag == -1) return -2147483648; 25 } 26 //正负号的修正 27 if (flag == -1) num = -num; 28 return (int) num; 29 } 30 }