美文网首页
【每日一题】8. String to Integer (atoi

【每日一题】8. String to Integer (atoi

作者: Something0124 | 来源:发表于2019-05-21 15:39 被阅读0次

    想了想还是用leetcode吧,测试用例更加严谨一些,lintcode的题有些描述有问题,有些测试用例不够完善。
    原题链接

    题目:

    将字符串转换为数字。
    从第一个非空格的字符串开始处理到第一个非数字字符结束,如果str[0]是+/-,则将数字转换成对应的正负数;如果是数字,直接转换成对应正数;如果str[0]是非数字字符,直接返回0。
    数字的大小范围为 [−2^31, 2^31 − 1],小于下界则返回下界值,大于上界返回上界值。

    Input: "42"
    Output: 42

    Input: "4193 with words"
    Output: 4193

    Input: "-91283472332"
    Output: -2147483648

    这道题用python会简单不少,python自带大数处理功能,这就会使这道题简单不少。像这样:

    >>> 2**34
    17179869184
    

    一个简单的思路是:

    1. 先去掉字符串最左边的空格
    2. 判断字符串的长度,如果长度为0,则直接返回0
    3. 判断str[0]是否为-/+,如果是-,最后的结果要乘-1;如果是+,最后的结果要乘1。字符串再从str[1]进行切片,并判断字符串长度。如果不是-/+,则不处理。
    4. 判断切片后的str[0]是否为数字,不是数字,直接return 0
    5. 循环读取字符串,同时将读取到的数字字符拼接成一个整数。碰到第一个非数字字符跳出循环。
    6. 对结果进行处理:判断大小和正负数处理。

    代码:

    class Solution:
        def myAtoi(self, str: str) -> int:
            str = str.lstrip()
            INT_MAX = 2**31-1
            INT_MIN = -2**31
            temp = 1
            ans = 0
            if len(str)==0:
                return 0
            if str[0] == '-' or str[0] == '+':
                if str[0]=='-':
                    temp = -1
                else:
                    temp == 1
                str = str[1:]
            if len(str)==0:
                return 0
            elif str[0].isdigit() is False:
                return 0
            for i in str:
                if i.isdigit() is True:
                    ans = ans * 10 + int(i)
                else:
                    break
            ans = ans*temp
            if ans<INT_MIN:
                return INT_MIN
            elif ans>INT_MAX:
                return INT_MAX
            else:
                return ans
    

    待补充:可以考虑用java实现一下。

    相关文章

      网友评论

          本文标题:【每日一题】8. String to Integer (atoi

          本文链接:https://www.haomeiwen.com/subject/mhtjzqtx.html