Log
- 【170412】完成 01 版代码(Python)与 01 版笔记
- 【170416】看完参考答案并记录思路
题目
- String to Integer (atoi)
【题目类型备注】
数学, 字符串
提交
01
【语言】
Python
【时间】
170412
【思路】
其实最开始我考虑了多种情况,包括认为 123,456,789
都是合法的可转为 123456789
的字符串,但在提交前后,我发现了仅有这 4 条规则是适用的:
- 程序应该从首位非空白字符开始识别
- 首位可识别的非空格字符,只能是数字,或者是
+
或-
:任何其他符号都将直接导致程序返回 0 - 程序只要从非空格字符第 0 位或第 1 位开始识别数字,直到遇到第 1 个非数字字符为止
- 发生溢出时,输出边界值(上溢边界值或下溢边界值),而非输出 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 帐号的人能不能看到该报告,所以顺便附图如下:
02
【语言】
C++
【时间】
【思路】
【代码】
【结果】
运行时:。。。 ms
报告链接:。。。
不知道其他拥有 LeetCode 帐号的人能不能看到该报告,所以顺便附图如下:
。。。
00
看过参考解法,思路基本一致,只在工程实现上有差异。择日用 C++ 等重新实现一遍吧,本题从算法角度看,价值不高