您的位置:首页 > 其它

LeetCode之 String to Integer (atoi)

2018-03-26 13:45 274 查看
做一个短视的人!

LeetCode官网:https://leetcode.com/

我是直接用GitHub授权登录的。

问题

实现atoi将字符串转换为整数。

提示:

仔细考虑所有可能的输入案例。如果你想要一个挑战,请不要在下面看到问问自己什么是可能的输入案例。

注意:

这是针对这个问题被隐含的指定的(即没有给定的输入规格)。您有责任预先收集所有输入要求。

atoi的要求:

该函数首先丢弃尽可能多的空白字符,直到找到第一个非空白字符。然后,从这个字符开始,采用一个可选的初始正号或负号,后面跟随尽可能多的数字,并将它们解释为数字值。

该字符串可以在形成整数的那些字符之后包含额外的字符,这些字符被忽略并且对该函数的行为没有影响。

如果str中的第一个非空白字符序列不是有效的整数,或者如果由于str为空或仅包含空白字符而不存在此类序列,则不执行转换。

如果不能执行有效的转换,则返回零值。如果正确值超出了可表示值的范围,则返回INT_MAX(2147483647)或INT_MIN(-2147483648)。

解法

class Solution {
public int myAtoi(String str) {
int index = 0, sign = 1, 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) == '-'){
sign = str.charAt(index) == '+' ? 1 : -1;
index ++;
}

//4. Convert number and avoid overflow
while(index < str.length()){
int digit = str.charAt(index) - '0';
if(digit < 0 || digit > 9) break;

//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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: