leetcode 8. 字符串转换整数 String to Integer (atoi)

先判断空串以及全为空格的情况,返回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

猜你喜欢

转载自blog.csdn.net/yuejisuo1948/article/details/84677175
今日推荐