leetcode08. 字符串转换整数 (atoi)
发布人:shili8
发布时间:2025-01-10 05:17
阅读次数:0
**字符串转换整数 (atoi)**在 LeetCode 中,第8 个问题是 "字符串转换整数 (atoi)"。这个问题要求我们实现一个函数 `atoi`,它可以将一个给定的字符串转换为整数。
###问题描述给定一个字符串 `s`,请实现函数 `atoi`,将该字符串转换为整数(以十进制)。如果可能,则返回该整数的值。否则返回0。
**注意:**
* 当 `s` 的前几个字符是空格时,我们应该忽略它们。
* 如果 `s` 中的第一个非空白字符不是数字或符号位,我们应该返回0。
* 如果 `s` 中存在多个连续的空格,我们应该忽略它们。
* 如果 `s` 是负数,我们应该将其转换为正数。
* 如果 `s` 的值超出了32 位有符号整数的范围(即,-2^31 <= val <=2^31 -1),我们应该返回0。
### 示例示例1:
输入:`"42"`
输出:`42`
解释:没有任何错误,这个函数将 "42" 转换为整数42。
示例2:
输入:`"-42"`
输出:`-42`
解释:这个函数将 "-42" 转换为整数 -42。
示例3:
输入:`"4193 with words"`
输出:`4193`
解释:这个函数将 "4193 with words" 转换为整数4193,因为它忽略了非数字字符。
示例4:
输入:`"-1"`
输出:`-1`
解释:这个函数将 "-1" 转换为整数 -1。
示例5:
输入:`"words and987"`
输出:`0`
解释:这个函数返回0,因为它忽略了非数字字符。
### 解决方案我们可以使用一个循环来遍历字符串 `s`,并且在每次迭代中,我们检查当前字符是否是数字或符号位。如果是,我们将其转换为整数,并更新结果值。否则,我们返回0。
def atoi(s: str) -> int: """ 将一个给定的字符串转换为整数(以十进制)。 Args: s (str): 要转换的字符串。 Returns: int: 转换后的整数值。 """ # 移除前导空白符 s = s.lstrip() # 如果 s为空或第一个非空白字符不是数字或符号位,则返回0 if not s or (s[0] != '-' and s[0] != '+' and not s[0].isdigit()): return0 # 初始化结果值和符号位 result =0 sign =1 # 如果第一个非空白字符是负号,则更新符号位 if s[0] == '-': sign = -1 s = s[1:] # 遍历剩余的字符串并将其转换为整数 for char in s: if not char.isdigit(): break result = result *10 + ord(char) - ord('0') # 更新结果值并返回 result *= sign return max(min(result,2**31 -1), -2**31)
### 测试我们可以使用以下测试用例来验证 `atoi` 函数的正确性:
print(atoi("42")) # 输出:42print(atoi("-42")) # 输出:-42print(atoi("4193 with words")) # 输出:4193print(atoi("-1")) # 输出:-1print(atoi("words and987")) # 输出:0
### 总结在本文中,我们实现了一个 `atoi` 函数,它将一个给定的字符串转换为整数(以十进制)。我们使用循环遍历字符串,并且在每次迭代中,我们检查当前字符是否是数字或符号位。如果是,我们将其转换为整数,并更新结果值。否则,我们返回0。
我们还提供了测试用例来验证 `atoi` 函数的正确性。