leetcode String to Integer (atoi)

来源:互联网 发布:navicat如何连接mysql 编辑:程序博客网 时间:2024/06/08 03:53

题目地址这里

这个题涉及到了乘法的溢出判断和加法的溢出判断。加法的溢出判断在我之前的reverse integer有

乘法溢出的判断。我仅仅是想到这样的一个方法。就是乘过来再除回去。
判断溢出的代码如下

                resultTemp=result*10;                if(resultTemp/10!=result)                {                    if(positive)                    {                        return 2147483647;                    }                    else                    {                        return -2147483648;                    }                }

题目的解答代码如下

public class Solution {    public int myAtoi(String str) {        if(str==null)        {            return 0;        }        str=str.trim();        if(str.length()==0)        {            return 0;        }        boolean positive=true;        boolean haveFlag=false;        int result=0;        switch (str.charAt(0)) {        case '-':            positive=false;            haveFlag=true;            break;        case '+':            positive=true;            haveFlag=true;            break;        default:            if(Character.isDigit(str.charAt(0)))            {                positive=true;                haveFlag=false;            }            else            {                return 0;            }            break;        }        int i;        if(haveFlag)        {            i=1;        }        else        {            i=0;        }        int resultTemp;//乘法溢出检测用        while(i<str.length())        {            if(Character.isDigit(str.charAt(i)))            {                resultTemp=result*10;                if(resultTemp/10!=result)                {                    if(positive)                    {                        return 2147483647;                    }                    else                    {                        return -2147483648;                    }                }                if(positive)                {                    result=resultTemp+str.charAt(i)-'0';                }                else                {                    result=resultTemp-(str.charAt(i)-'0');                }                if(positive&&result<0)                {                    return 2147483647;                }else if (!positive&&result>0)                {                    return -2147483648;                }            }            else            {                return result;            }            i++;        }        return result;    }} 
0 0
原创粉丝点击