这个题水题,没什么可说的。需要注意以下的几个注意事项:
1.首先是边界条件,如果是遇到null或者长度为零的字符串返回值,leetcode期望的答案为0.
2.处理数字前面的空格
3.处理第一个字符,第一个字符可以是数字或者是+,-号。设置一个boolean neg来记录该数的正负。
4.接下来就是要处理overflow了,用了一个boolean的overflow,这里有两种overflow,一种是正数或者负数的溢出。另一种是位数大于MAX_VALUE
<处理overflow的时候要小心,一种是214748364再加一位出现overflow,还有一种是数字大于1000000000,关系要搞对,是或的关系。>
5.返回值时,要考虑到正负,用记录正负的neg。
废话不多说,直接上代码
public int atoi(String str) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(str == null || str.length() == 0) return 0;
int ans=0;
int index=0;
boolean neg = false;
boolean overflow = false;
int len = str.length();
//first step skip all the whitespace
while(index<len && str.charAt(index)==' ')index++;
if(str.charAt(index)=='+'){
neg = false;
index++;
}
if(str.charAt(index)=='-'){
neg = true;
index++;
}
while(index<len && str.charAt(index)>='0' && str.charAt(index)<='9'){
int digit = str.charAt(index)-'0';
if((ans >=214748364)&& ((!neg && digit>=7)||(neg&&digit>=8)||ans>=1000000000)){
overflow = true;
break;
}
ans=ans*10+digit;
index++;
}
if(overflow){
if(neg) return Integer.MIN_VALUE;
else return Integer.MAX_VALUE;
}
if(neg) return (-1)*ans;
else return ans;
}
No comments:
Post a Comment