美文网首页
【每日一题】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