8. String to Integer (atoi)
2017-10-26 本文已影响12人
ciantian
最近再刷leetcode,除了链表之外的都用python 实现,贴出一些代码,希望指正.
问题描述:
字符转为整数,问题不难,不过需要注意的情况很多.
比如:
- 两边或者中间有空格 两边的去除空,中间的返回空之前的字符.
- +-123这种 直接返回0
- -12a12这种 返回-12
- 越界 超过pow(2,31)
- 整数最大2147483647,负数最小-2147483648
解决思路:
先读第一个字符判断正负,对正常的字符存入一个list,遇到非法字符中断,最后再进行求和.
详细看代码
class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
str = str.strip()
length = len(str)
if length == 0:
return 0
if length == 1:
if 48 < ord(str[0]) < 57:
return int(str[0])
else:
return 0
if ord(str[1]) == ord('-') or ord(str[1]) == ord('+') and length > 2:
return 0
flag = 1
if ord(str[0]) == ord('-'):
flag = -1
elif ord(str[0]) == ord('+'):
flag = 1
new_list = []
for i in range(length):
if i == 0 and (ord(str[0]) == ord('-') or ord(str[0]) == ord('+')):
pass
elif 48 <= ord(str[i]) <= 57:
new_list.append(int(str[i]))
else:
break
sum = 0
for i, each in enumerate(new_list):
sum = sum + each * pow(10, len(new_list) - 1 - i)
if sum >= pow(2, 31) and flag == 1:
return 2147483647
elif sum >= pow(2, 31) and flag == -1:
return -2147483648
return sum * flag
solution = Solution()
print(solution.myAtoi("123"))