8. 字符串转换整数 (atoi)

题目

请你来实现一个 m y A t o i ( s t r i n g s ) myAtoi(string s) myAtoi(strings) 函数,使其能将字符串转换成一个 32 32 32 位有符号整数(类似 C / C + + C/C++ C/C++ 中的 a t o i atoi atoi 函数)。

例子

官网

  1. 输入: s = “ 42 " s = “42" s=“42"
    输出: 42 42 42
  2. 输入: s = " − 42 " s = " -42" s="42"
    输出: − 42 -42 42
  3. 输入: s = " 4193 w i t h w o r d s " s = "4193 with words" s="4193withwords"
    输出: 4193 4193 4193

思路

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)
class Solution:
    def myAtoi(self, s: str) -> int:
        nums = []
        i = 0
        sign = 1
        # 去除前导空格
        while i < len(s) and s[i] == ' ':
            i += 1
        
        # 判断符号位
        if i < len(s) and (s[i] == '-' or s[i] == '+'):
            if s[i] == '-':
                sign = -1
            i += 1
        
        # 按顺序读取数字,直到非数字字符
        while i < len(s) and s[i].isdigit():
            nums.append(s[i])
            i += 1
            # 判断下一个字符是否为数字
            if i < len(s) and not s[i].isdigit():
                break
        
        # 将数字字符串转换为数字,同时乘上符号位
        result = sign * int(''.join(nums)) if nums else 0
        
        # 判断是否超出整数范围
        INT_MIN, INT_MAX = -2**31, 2**31-1
        if result < INT_MIN:
            return INT_MIN
        elif result > INT_MAX:
            return INT_MAX
        else:
            return result

你可能感兴趣的:(LeetCode题解,leetcode,算法,数据结构)