先判断空串以及全为空格的情况,返回0,让索引指向第一个非空格字符;
判断正号和符号;
从索引处开始获取字符,先判断该字符是不是0~9,若不是则跳出循环,若是则将其转换成int型;
然后判断当前数后面补上这个数字后会不会溢出,不会溢出时再去补上这个数字。
java
class Solution {
public int myAtoi(String str) {
if(str.length()==0) return 0;
int i=0;
while(str.charAt(i)==' ')
{
i++; //让i指向第一个非空格字符
if(i==str.length()) return 0; //全为空格时返回0
}
int sign=1;
if(str.charAt(i)=='+') i++;
else if(str.charAt(i)=='-')
{
sign=-1;
i++;
}
int num=0;
while(i<str.length())
{
int digit = str.charAt(i)-'0';
if(digit<0||digit>9) break;
//如果num*10+digit溢出,则返回上下限
if((num>Integer.MAX_VALUE/10)||(num==Integer.MAX_VALUE/10 && digit>Integer.MAX_VALUE%10))
return sign==1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
num = num*10+digit;
i++;
}
return sign*num;
}
}
python
class Solution:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
str = str.strip()
if len(str)==0:
return 0
i=0
sign = 1
if str[i]=='+':
i+=1
elif str[i]=='-':
sign=-1
i+=1
int_max = 2**31-1
int_min = -2**31
num = 0
for c in str[i:]:
if '0'<= c <='9':
digit = int(c)
else:
break
if num>int_max//10 or (num==int_max//10 and digit>int_max%10):
return int_max if sign==1 else int_min
num = num*10+digit
return sign*num