美文网首页
算功@LeetCode:StringToInteger(atoi

算功@LeetCode:StringToInteger(atoi

作者: 苏尚君 | 来源:发表于2017-04-13 02:21 被阅读17次

    Log

    • 【170412】完成 01 版代码(Python)与 01 版笔记
    • 【170416】看完参考答案并记录思路

    题目

    【题目类型备注】

    数学, 字符串

    提交

    01

    【语言】

    Python

    【时间】

    170412

    【思路】

    其实最开始我考虑了多种情况,包括认为 123,456,789 都是合法的可转为 123456789 的字符串,但在提交前后,我发现了仅有这 4 条规则是适用的:

    1. 程序应该从首位非空白字符开始识别
    2. 首位可识别的非空格字符,只能是数字,或者是 +-:任何其他符号都将直接导致程序返回 0
    3. 程序只要从非空格字符第 0 位或第 1 位开始识别数字,直到遇到第 1 个非数字字符为止
    4. 发生溢出时,输出边界值(上溢边界值或下溢边界值),而非输出 0

    这个问题主要就是处理上述情况,然后使用一点简单的计算,即可把获取到的数字型字符转换成数字,然后组合成需要的整数并输出即可

    【代码】

    class Solution(object):
        def myAtoi(self, str):
            """
            :type str: str
            :rtype: int
            """
            pstr = str.strip()
            if "" == pstr:
              return 0
            if (not pstr[0].isdigit()) and (pstr[0] not in ['+', '-']):
              return 0
            if (len(pstr) == 1 and pstr.isdigit()):
              return int(pstr)
            else:
              if not pstr[0].isdigit():
                indFirst = 0
              else:
                indFirst = -1
    
              indLast = indFirst+1
              while (indLast < len(pstr)) and (pstr[indLast].isdigit()):
                indLast += 1
              indLast -= 1
    
              result = 0
              order = 0
              for ind in range(indLast, indFirst, -1):
                 result += (int(pstr[ind]) * pow(10, order))
                 order += 1
    
            #Dealing with the sign 
            if '-' == pstr[0]:
              result = -result
              if result < -pow(2, 31):
                result = -pow(2, 31)
            else:
              if result > (pow(2, 31)-1):
                result = pow(2, 31) - 1
    
            return result
    

    【结果】

    运行时:79 ms

    报告链接:https://leetcode.com/submissions/detail/99893138/

    不知道其他拥有 LeetCode 帐号的人能不能看到该报告,所以顺便附图如下:

    Your runtime beats 48.44% of python submissions.

    02

    【语言】

    C++

    【时间】

    【思路】

    【代码】

    【结果】

    运行时:。。。 ms

    报告链接:。。。

    不知道其他拥有 LeetCode 帐号的人能不能看到该报告,所以顺便附图如下:

    。。。

    00

    看过参考解法,思路基本一致,只在工程实现上有差异。择日用 C++ 等重新实现一遍吧,本题从算法角度看,价值不高

    相关文章

      网友评论

          本文标题:算功@LeetCode:StringToInteger(atoi

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