49 把字符串转换成整数
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。
示例:
输入: "+123"
输出: 123
输入: "-123"
输出: -123
输入: " 123"
输出: 0(前导空格不算)
输入: "123a"
输出: 0解题思路
核心思想:逐个字符处理,判断符号和数字。
关键步骤:
- 判断第一个字符是否为符号
- 遍历每个字符,判断是否为数字
- 计算数值:result = result * 10 + digit
- 应用符号
时间复杂度:O(n) 空间复杂度:O(1)
Python 实现
python
def str_to_int(s):
"""
将字符串转换成整数
Args:
s: 字符串
Returns:
int: 转换后的整数
"""
if not s:
return 0
result = 0
sign = 1
index = 0
# 判断符号
if s[0] == '+':
index = 1
elif s[0] == '-':
index = 1
sign = -1
# 转换数字
for i in range(index, len(s)):
char = s[i]
if char < '0' or char > '9':
return 0
result = result * 10 + (ord(char) - ord('0'))
return sign * result
# 测试代码
if __name__ == "__main__":
test_cases = [
"+123",
"-123",
"123",
"0",
"123a",
"",
]
for s in test_cases:
print(f"'{s}' → {str_to_int(s)}")
# 输出:
# '+123' → 123
# '-123' → -123
# '123' → 123
# '0' → 0
# '123a' → 0
# '' → 0图解
示例: "+123"
sign=1, index=1
i=1: char='1', result=0*10+1=1
i=2: char='2', result=1*10+2=12
i=3: char='3', result=12*10+3=123
result = 1 * 123 = 123
---
示例: "-123"
sign=-1, index=1
i=1: char='1', result=1
i=2: char='2', result=12
i=3: char='3', result=123
result = -1 * 123 = -123