题意:将一个字符串表示的数字转化为 integer。
分析:
1. 首先需要丢弃字符串前面的空格;
2. 可能有正负号(注意只取一个,如果有多个正负号,那么这个字符串是无法转换的,返回0。比如测试用例里就有个“+-2”);
3. 字符串可以包含0~9以外的字符,如果遇到非数字字符,那么只取该字符之前的部分,如“-00123a66”返回为“-123”;
4. 如果超出int的范围,返回边界值(2147483647或-2147483648)。
如果不看提示的话,很少会有人一下子写对。首先条件可能考虑不周,其次就算考虑到了,怎么处理也是个问题,比如条件3和条件4,所以在面试的时候还是应该多和面试官进行沟通。
class Solution {
public int myAtoi(String str) {
int num = 0;
int sign = 1;
int n = str.length();
int i = 0;
if(n == 0) return 0;
while (str.charAt(i) == ' ' && i < n)
i++;
if (str.charAt(i) == '+') {
i++;
} else if (str.charAt(i) == '-') {
sign = -1;
i++;
}
for (; i < n; i++) {
if (str.charAt(i) < '0' || str.charAt(i) > '9')
break;
if (num > Integer.MAX_VALUE / 10
|| (num == Integer.MAX_VALUE / 10 && (str.charAt(i) - '0') > Integer.MAX_VALUE % 10)) {
return sign == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
num = num * 10 + str.charAt(i) - '0';
}
return num * sign;
}
public static void main(String[] args) {
Solution sl = new Solution();
String str = "";
System.out.println(sl.myAtoi(str));
}
}