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.
Code:
/**
* @author MohnSnow
* @time 2015年6月2日 下午2:34:18
*
*/
public class LeetCode8 {
public static int myAtoi(String str) {
int index = 0;
int sign = 1;
char ch;
int digit;
int total = 0;
//1. Empty string---字符串为空的时候
if (str.length() == 0)
return 0;
//2. Remove Spaces---计算初始空格数量,从开始有符号的位置开始
while (str.charAt(index) == ' ' && index < str.length())
{
index++;
}
//3. Handle signs---处理符号
if (str.charAt(index) == '+' || str.charAt(index) == '-')
{
if (str.charAt(index) == '+')
sign = 1;
else
sign = -1;
index++;
}
//4. Convert number and avoid overflow---转换数字,避免溢出
while (index < str.length())
{
ch = str.charAt(index);
if (ch < '0' || ch > '9')
break;
digit = ch - '0';
//check if total will be overflow after 10 times and add digit---对下面的判断进行溢出判断
if (Integer.MAX_VALUE / 10 < total || Integer.MAX_VALUE / 10 == total && Integer.MAX_VALUE % 10 < digit)
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
total = 10 * total + digit;
index++;
}
return total * sign;
}
public static void main(String[] args) {
String c = " 2a147 483646";
System.out.println(myAtoi(c));
}
}