Skip to main content

String to Integer (atoi)

String to Integer (atoi)

描述

给定一个字符串, 转换为数字

示例:
输入: "123"
输出: "123"

输入: "+123"
输出: "123"

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

分析

题目本身不难, 不过给出的描述不是特别精确, 对于 atoi, 每种语言的实现不太一样, 比如对于”123abc”这种输入, 有些语言给出的是123, 有些语言直接报错

按照题目给的 case 看了看, 实际的实现是, 从第一个非空字符开始, 到第一个不合法的字符终止, 中间的字符转换为数字

另外, “+-1”不合法, 再考虑一下溢出的情况就好

答案

class Solution(object):
    def myAtoi(self, s):
        """
        :type str: str
        :rtype: int
        """
        if s == "":
            return 0
        start = 0
        for i in s:
            if i == " ":
                start += 1
            else:
                break
        u = 1
        if s[start] == "-" or s[start] == "+":
            if s[start] == "-":
                u = -1
            start += 1
        r = None
        for i in s[start::]:
            if ord(i) < 48 or ord(i) > 57:
                if r is None:
                    return 0
                else:
                    break
            else:
                if r is None:
                    r = ord(i) - ord("0")
                else:
                    r = r * 10 + ord(i) - ord("0")
        if r is None:
            return 0
        res = r * u
        if res > pow(2, 31) - 1:
            return (pow(2, 31) - 1)
        if res < -pow(2, 31):
            return -pow(2, 31)
        return res
打赏
微信扫一扫支付
微信logo微信扫一扫, 打赏作者吧~