https://leetcode.com/problems/string-to-integer-atoi/#/description
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Update (2015-02-10):
The signature of the C++
function had been updated. If you still see your function signature accepts a const char *
argument, please click the reload button to reset your code definition.
spoilers alert... click to show requirements for atoi.
package go.jacob.day706;
public class Demo1 {
/*
* [leetcode]8. String to Integer (atoi)
* 该题需要考虑的几个关键点:1.正负号;2.中间存在字母(只取字母前的数字);3.溢出;4.前后空格
*
* Integer.Min_VALUE=-2147483648 . Integer.MAX_VALUE=2147483647
*/
public static int myAtoi(String str) {
if (str == null || str.trim().length() < 1)
return 0;
//处理掉前后空格
char[] arr = str.trim().toCharArray();
int sign = 1, index = 0;
//判断正负号
if (arr[0] == '+')
index++;
if (arr[0] == '-') {
sign = -1;
index++;
}
int num = 0;
for (int i = index; i < arr.length; i++) {
if (arr[i] - '0' >= 0 && arr[i] - '9' <= 0) {
//如果当前运算会越界的时候,直接输出结果
if (num > Integer.MAX_VALUE / 10 || num == Integer.MAX_VALUE / 10 && arr[i] - '7' > 0) {
if (sign > 0)
return Integer.MAX_VALUE;
else
return Integer.MIN_VALUE;
}
num = 10 * num + arr[i] - '0';
} else
//如果是字母,跳出循环
break;
}
return num * sign;
}
}