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

该文介绍了一个名为myAtoi的函数,用于将输入字符串转换为32位有符号整数,类似于C/C++的atoi函数。函数首先去除前导空格,然后处理正负号,接着读取数字直到遇到非数字字符。最后,将数字字符串转换为整数并检查是否超出INT_MIN(-2^31)和INT_MAX(2^31-1)的整数范围。整个过程的时间复杂度和空间复杂度均为O(n)。
摘要由CSDN通过智能技术生成

题目

请你来实现一个 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值