这道题虽然思路简单,但是有许多边界条件需要考虑,多练这类题可以使自己思维更加严密吧!
需要考虑的边界问题:
1.字符串为空或长度为0;
2.字符串前缀为空格应将这些空格跳过去;
3.碰到加号减号 正负号应该变换如"12+1"和"12-1"应该分别输出121和119;
4.如果连着出现两个以上非数字的字符直接跳出;
5.考虑数字溢出情况
差不多就这样,下面上代码:
public class Solution {
public static int myAtoi(String str) {
if (str == null || str.length() == 0)
return 0;
int i = 0;
while (i < str.length() - 1 && str.charAt(i) == ' ')
++i;
if (str.charAt(i) == '\0')
return 0;
long flag = 0;
int sign = 1;
for (; i < str.length(); i++) {
if (str.charAt(i) == '+') {
sign = 1;
++i;
} else if (str.charAt(i) == '-') {
sign = -1;
++i;
}
if (str.charAt(i) >= 48 && str.charAt(i) <= 57)
flag = flag * 10 + sign * (str.charAt(i) - 48);
else
return (int) flag;
if (flag > 2147483647 || flag < -2147483648)
return flag > 0 ? 2147483647 : -2147483648;
}
return (int) flag;
}
}