您的位置:首页 > 其它

LeetCode_8---String to Integer (atoi)

2015-06-02 14:29 295 查看
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));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode 算法