算功@LeetCode:StringToInteger(atoi)

Log

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

题目

  • String to Integer (atoi)

【题目类型备注】

数学, 字符串

提交

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 帐号的人能不能看到该报告,所以顺便附图如下:

算功@LeetCode:StringToInteger(atoi)_第1张图片
Your runtime beats 48.44% of python submissions.

02

【语言】

C++

【时间】

【思路】

【代码】

【结果】

运行时:。。。 ms

报告链接:。。。

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

。。。

00

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

你可能感兴趣的:(算功@LeetCode:StringToInteger(atoi))