Skip to content

49 把字符串转换成整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。

示例

输入: "+123"
输出: 123

输入: "-123"
输出: -123

输入: "  123"
输出: 0(前导空格不算)

输入: "123a"
输出: 0

解题思路

核心思想:逐个字符处理,判断符号和数字。

关键步骤

  1. 判断第一个字符是否为符号
  2. 遍历每个字符,判断是否为数字
  3. 计算数值:result = result * 10 + digit
  4. 应用符号

时间复杂度: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
最近更新

基于 MIT 许可发布