跳过正文
  1. 科学/
  2. 计算机/
  3. 算法/
  4. Leetcode/

0008 字符串转整数

Solution

class Solution:
    def myAtoi(self, s: str) -> int:
        if not s:
            return 0
        n = len(s)
        if n == 0:
            return 0
        i = 0
        while s[i] == ' ':
            i += 1
            if i == n:
                return 0
        sign = -1 if s[i] == '-' else 1
        if s[i] in ['-', '+']:
            i += 1
        res, flag = 0, (2**31 - 1) // 10
        while i < n:
            if not s[i].isdigit():
                break
            c = int(s[i])
            if res > flag or (res == flag and c > 7):
                return 2**31 - 1 if sign > 0 else -(2**31)
            res = res * 10 + c
            i += 1
        return sign * res


# 本地测试
if __name__ == "__main__":
    sol = Solution()
    print(sol.myAtoi("42"))                 # 42
    print(sol.myAtoi("   -42"))             # -42
    print(sol.myAtoi("4193 with words"))    # 4193
    print(sol.myAtoi("words and 987"))      # 0
    print(sol.myAtoi("-91283472332"))       # -2147483648
    print(sol.myAtoi("2147483648"))         # 2147483647
    print(sol.myAtoi("   "))                # 0