返回
以 LeetCode 题单开启算法之旅:第 8 题——字符串转换整数 (atoi) 的奇妙之旅
前端
2023-12-06 16:42:33
程序员的世界总是离不开算法。
记得我刚开始学习编程的时候,对算法一窍不通,看到代码中复杂的算法逻辑,就觉得头晕脑胀。但随着学习的深入,我逐渐意识到算法的重要性。算法是程序员解决问题、实现功能的利器,也是程序员必备的基本功。
最近,我在看框架源码时,会有很多算法的实现逻辑。一开始,我感到吃力,但后来我决定蹭着假期,加强算法和数据结构的学习。于是,我制定了一个计划,每天刷一道 LeetCode 题目,并把刷题经验和心得写成博客文章,分享给大家。
今天,我要分享的是 LeetCode 题单中的第 8 题——字符串转换整数 (atoi)。这是一道经典的题目,也是面试官经常会问到的题目。
题目
给定一个字符串,将字符串转换成一个整数。
示例 1:
输入: "42"
输出: 42
示例 2:
输入: " -42"
输出: -42
示例 3:
输入: "4193 with words"
输出: 4193
示例 4:
输入: "words and 987"
输出: 0
示例 5:
输入: "-91283472332"
输出: -2147483648
解题思路
这道题的解题思路其实很简单,就是按照以下步骤来做:
- 去除字符串首尾的空格。
- 判断字符串的符号。
- 将字符串中的数字部分提取出来。
- 将数字部分转换为整数。
- 返回转换后的整数。
实现细节
在实现 atoi 函数时,需要注意以下几点:
- 如果字符串为空,则返回 0。
- 如果字符串的首字符不是数字、正号或负号,则返回 0。
- 如果字符串中出现多个正号或负号,则只考虑第一个正号或负号。
- 如果字符串中出现非数字字符,则忽略该字符之后的字符。
- 如果转换后的整数超过了 32 位有符号整数的范围,则返回 INT_MAX 或 INT_MIN。
代码实现
def atoi(s: str) -> int:
"""
将字符串转换成一个整数。
Args:
s: 要转换的字符串。
Returns:
转换后的整数。
"""
# 去除字符串首尾的空格。
s = s.strip()
# 判断字符串的符号。
if s[0] == '-':
negative = True
s = s[1:]
elif s[0] == '+':
negative = False
s = s[1:]
else:
negative = False
# 将字符串中的数字部分提取出来。
i = 0
while i < len(s) and s[i].isdigit():
i += 1
# 将数字部分转换为整数。
num = int(s[:i])
# 返回转换后的整数。
if negative:
num = -num
if num > 2**31 - 1:
return 2**31 - 1
if num < -2**31:
return -2**31
return num
总结
通过对 LeetCode 题单中第 8 题——字符串转换整数 (atoi) 的分析和实现,我们不仅学到了如何将字符串转换为整数,还掌握了在实现 atoi 函数时需要注意的技巧。希望本文对大家有所帮助。