LeetCode(8) - String to Integer (atoi)

  虽然是easy,却是比较繁琐的一道题,需要考虑各种边界条件。在WA了好几遍之后,才把各种边界条件给补全。需要考虑到的因素如下:

  1. 输入不合法字符,非"0-9",对于首位,合法字符还包括"+"和"-"来代表正负号;
  2. 最前面允许出现很多个空格,即"      56";
  3. 当中间出现不合法字符,输出该不合法字符前面有效字符,如"+56a123",输出就是56;
  4. 注意越界的情况。

  当注意了上述情况之后,就没有太大问题了:

 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 }

 

posted @ 2016-02-29 04:25  可普CS之家  阅读(184)  评论(0编辑  收藏  举报