LeetCode题解(pyhon)
8. 字符串转换整数 (atoi)
题目描述:
在任何情况下,若函数不能进行有效的转换时,请返回 0。
说明:
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,qing返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
输入: "42"
输出: 42
示例 2:
输入: " -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:
输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
示例 4:
输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
因此无法执行有效的转换。
示例 5:
输入: "-91283472332"
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。
解题心得:
本题的算法思想并不难
难点在于把题目中每一个判定条件“安排”进程序里
用一个数组存储摘出来的数字即可
时间复杂度为
O(log(n))
,其中n=len(nums)
,nums
也即输出的数字的长度。
解题代码:
class Solution:
def myAtoi(self, str: str) -> int:
strr = str
sym = 1
num = ''
strr = strr.strip()
if len(strr) == 0:
return 0
if strr[0] == '+' and len(strr)==1:
return 0
if strr[0] == '-' and len(strr)==1:
return 0
if strr[0] == '+':
sym = 1
elif strr[0] == '-':
sym = -1
elif strr[0] >= '0' and strr[0] <= '9':
num = num+strr[0]
else:
return 0
for i in range(1,len(strr)):
if strr[i] >= '0' and strr[i] <= '9':
num = num + strr[i]
else:
break
if len(num)==0:
return 0
num = int(num)
nums = num*sym
if nums>=-pow(2,31) and nums<=(pow(2,31)-1):
return nums
elif nums < -pow(2,31):
return -pow(2,31)
elif nums > pow(2,31)-1:
return pow(2,31)-1