虽然是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 }