leetcode笔记总结——(3)字符串转换整数 (atoi)(python实现)
发布日期:2021-05-15 00:34:00 浏览次数:22 分类:精选文章

本文共 1140 字,大约阅读时间需要 3 分钟。

问题描述与解决方案

题目概述

我们需要将一个字符串转换为32位有符号整数。该字符串可能包含前导空格,正负号,以及零或多个数字。如果字符串为空或者无法转换成有效整数,则返回0。

输入限制

  • 字符串不为空。
  • 字符串只包含数字、空格和一个可选的前导符(+-)。

输出要求

将字符串转换为对应的32位有符号整数。假设输出环境只能存储32位整数,超过范围的结果需截断或调整到边界值。


技术方案

为了高效地解决这个问题,我们使用正则表达式来提取数字部分,并结合minmax函数来限制结果范围。

正则表达式分析

  • ^[\+\-]?\d+

    • ^: asserts position at start of string.
    • [\+\-]:匹配一个+-,但这一部分是可选的,因为它后面跟着?(零或一次出现)。
    • \d+:匹配一个或多个数字。
  • lstrip()

    • 剩余左边空格,确保处理的是有效的字符串。
  • findall()

    • 返回所有匹配项的字符串,可用于多个提取。
  • maxmin

    • max(int(...), 2**31 -1):限制上界。
    • min(int(...), -2**31):限制下界。
  • 代码实现

    import re
    class Solution:
    def myAtoi(self, s: str) -> int:
    stripped_s = s.lstrip()
    # 提取数字和符号
    match = re.findall(r'^[\+\-]?\d+', stripped_s)
    # 返回匹配结果的长度,如果是空则返回0
    if not match:
    return 0
    # 将字符串转换为整数
    num = int(match[0])
    # 限制在32位整数范围
    return max(min(num, 2**31 - 1), -2**31)

    功能解析

  • lstrip():去除前导空格。
  • 正则匹配:提取可能的数字字符串。
  • int()转换:将提取的字符串转换为整数。
  • 溢出处理:使用maxmin限制结果范围,确保在[-2^31, 2^31 - 1]之间。
  • 测试案例

    • 输入:" 12345 "
      • 结果:12345
    • 输入:"-123"
      • 结果:-123
    • 输入:"+9876543210"
      • 结果:9876543210
    • 输入:"12345678901234567890"
      • 结果:2147483647
    • 输入: ""
      • 结果:0
    • 输入: "-"
      • 结果:0

    总结

    该方法利用了正则表达式的灵活性和Python的简洁性,实现了一个高效且易读的解法。

    上一篇:python实现——Max左-Max右的最大绝对值问题
    下一篇:特征工程——主成分分析(PCA)的原理解析

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月22日 09时32分17秒