leetcode 第8题(实现atoi)

188 阅读1分钟
给定一个字符串,将其转换为32bit整数(考虑转换后的数超过4字节有符号数范围)

转换规则(太长了,略)


例:

"42" -> 42,    "-42"->-42,     "4193 with words" -> 4193,  "words with 897" -> 0, 


解法1:

class Solution:
    def myAtoi(self, str: str) -> int:
        str = str.lstrip()
        
        if not str:
            return 0
        
        carry = str[0]
        k = 1
        if carry in '+-':
            k = -1 if carry == '-' else 1
            str = str[1:]
        
        result = ''
        for c in str:
            if c.isdigit():
                result += c
            else:
                break
        
        rResult = 0 if not result else int(result) * k
        
        rResult = min(max(rResult, -1 * pow(2, 31)), pow(2, 31) - 1)
        
        return rResult
        
        



解法2(通过正则表达式来匹配满足条件的子串)

class Solution:
    def myAtoi(self, str):
        try:
            match = re.match('\s*(?P<sign>[+-]?)(?P<val>\d*).*', str)
            val = int('{s}{v}'.format(s=match.group('sign'), v=match.group('val')))
        except (ValueError, AttributeError):
            return 0
        
        return min(pow(2,31)-1, val) if val > 0 else max(pow(2,31), val)