8. String to Integer (atoi)

来源:互联网 发布:mac版qq怎么远程控制 编辑:程序博客网 时间:2024/05/20 12:51

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.

或许我自己写的有点复杂,但是毕竟是自己写的,先将就了。

public class Solution {
    public int myAtoi(String str) {
        if(str==null || str.length()==0) return 0;
        String s=str.trim();
        int len=s.length(),flag=1,i=0,count=0;
        long res=0;  //为了下边与最大和最小整数做比较,设置为long型
        for(i=0;i<len;++i){
            if(s.charAt(i)=='+'){
                if(count>0) return 0;   //count是用来对+和-计数的,如果一旦超过1个就return 0,因为+-123或者-+123都返回0
                count++;
            }
            else if(s.charAt(i)=='-'){  //必须写成这一句而不是下一句
            //if(s.charAt(i)=='-'){
                if(count>0) return 0;
                flag=-1;
                count++;
            }
            else break; //必须要break啊,不然不跳出来,一直循环下去,i就自加的不符合题意了
        }
        //if(!(s.charAt(i)>='0' && s.charAt(i)<='9') && i<len) return 0;
        if(i<len && !(s.charAt(i)>='0' && s.charAt(i)<='9')) return 0;//必须写成这儿而不是上边一句,&&的执行啊
        for(int j=i;j<len;++j){
            if(s.charAt(j)>='0' && s.charAt(j)<='9'){
                res=res*10+(s.charAt(j)-'0'); 
                res=(flag==-1 ? res*(-1) : res);
                if(res>Integer.MAX_VALUE)   return Integer.MAX_VALUE;
                if(res<Integer.MIN_VALUE)   return Integer.MIN_VALUE;
                res=(flag==-1 ? res*(-1) : res);  //负负得正
            }
            else    break; //这个的测试集,是对-123ab45输出为-123,对+-123输出0等
        }
        res=(flag==-1 ? res*(-1) : res);
        return (int)res; //把long型转为int
    }


看看下边这个程序比上边那个精简了多少

public class Solution {
    public int myAtoi(String str) {
        if(str==null || str.length()==0) return 0;
        String s=str.trim();
        int len=s.length(),flag=1,i=0;
        double res=0;  //double的最大值比long的大
        if(s.charAt(i)=='+')  ++i;  //因为只有一个+或者一个-号的正规,所以简化成这样
        else if(s.charAt(i)=='-'){  //必须写成这一句而不是下一句
        //if(s.charAt(i)=='-'){
                flag=-1;
                ++i;
        }
        //if(!(s.charAt(i)>='0' && s.charAt(i)<='9') && i<len) return 0;
        if(i<len && !(s.charAt(i)>='0' && s.charAt(i)<='9')) return 0;//必须写成这儿而不是上边一句,&&的执行啊
        for(int j=i;j<len;++j){
            if(s.charAt(j)>='0' && s.charAt(j)<='9')
                res=res*10+(s.charAt(j)-'0'); 
            else    break; //这个的测试集,是对-123ab45输出为-123,对+-123输出0等
        }
        res=(flag==-1 ? res*(-1) : res);
        if(res>Integer.MAX_VALUE)   return Integer.MAX_VALUE;
        if(res<Integer.MIN_VALUE)   return Integer.MIN_VALUE;
        return (int)res; //把long型转为int
    }
}


public class Solution {
    public int myAtoi(String str) {
        str=str.trim();
        //int len=str.length(),i=0;
        if(str==null || str.length()==0)    return 0;
        int len=str.length(),i=0; //如果不写在这儿而是上边是不对的,因为卸载上边的话如果str为null,就会报错
        int flag=1;
        //long res=0;
        double res=0;
        if(str.charAt(0)=='+')  ++i;
        else if(str.charAt(0)=='-'){
            flag=-1;
            ++i;
        }
        while(i<len && str.charAt(i)>='0' && str.charAt(i)<='9'){
            res=res*10+str.charAt(i)-'0';
            ++i;
        }
        res=flag!=1? res*(-1) : res;
        if(res>Integer.MAX_VALUE)   return Integer.MAX_VALUE;
        if(res<Integer.MIN_VALUE)   return Integer.MIN_VALUE;
        return (int)res;
    }
}

下边这个是转发的,可以看看http://www.07net01.com/2015/07/863326.html

public class Solution {
    public int myAtoi(String str) { 
        int max = Integer.MAX_VALUE; 
        int min = -Integer.MIN_VALUE;
        long result = 0; 
        str = str.trim(); 
        int len = str.length(); 
        if (len < 1) return 0; 
        int start = 0;
        boolean neg = false;//标示正负 
        if (str.charAt(start) == '-' || str.charAt(start) == '+') { 
            if (str.charAt(start) == '-') 
                neg = true; 
            start++; 
        } 
        for (int i = start; i < len; i++) { 
            char ch = str.charAt(i); 
            if (ch < '0' || ch > '9') break; 
            result = 10 * result + (ch - '0'); 
            if (!neg && result > max)// 超出边界时,直接返回边界值 
                return max; 
            if (neg && -result < min) 
                return min; 
            
        } 
        if (neg) result = -result;
        return (int) result; 
        
    }
}

0 0
原创粉丝点击