Friday, November 22, 2013

String to Integer LeetCode

这个题水题,没什么可说的。需要注意以下的几个注意事项:
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