8. String to Integer (atoi)
经典的atoi,注意各种条件的处理就好了。
话说我还以为要处理0x
的16进制,处理科学计数法之类的。结果只要考虑正负号就好了。那就更简单了。
public class Solution {
public int myAtoi(String str) {
if (str == null || str.trim().length() == 0)
return 0;
char[] array = str.trim().toCharArray(); // 注意trim
boolean positive = true;
// 用一个stack存储digit
LinkedList<Integer> stack = new LinkedList<Integer>();
for (int i = 0; i < array.length; i++) {
// 只有第一位字符可以是正负号
if (i == 0 && array[i] == '+') {
positive = true;
continue;
}
if (i == 0 & array[i] == '-') {
positive = false;
continue;
}
// 如果不是数字,直接break,后面的字符都不管了
if (!(array[i] >= '0' && array[i] <= '9')) {
break;
}
stack.push(array[i] - '0');
}
long res = 0, i = 0;
while (stack.size() > 0) {
res += stack.pop() * Math.pow(10, i);
i++;
}
if (!positive) {
res = res * -1;
}
// 注意int的各种溢出条件
if (res > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
}
if (res < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
return (int) res;
}
}