字符串转化成整数,经典面试题目。
实际上用python实现都觉得不过瘾,因为很多实现的注意事项都可以调用函数库,导致没有练习到。
这里需要考虑的地方主要是:
对字符串进行strip
判断第一个正负符号,注意没有符号意味着正数。
每次当前结果每次加上当前的值(使用int转换后的)之后乘以10.
循环碰到第一个不是字符的字符,跳出。
循环跳出后结果还要除以10
因为python的最大最小值比2147483647要大好多,所以实际上这个限制也只是针对这道题而言的。
在我的机器上(64位)python的maxint是:9223372036854775807
代码如下:
class Solution:
def atoi(self,str_):
str_ = str_.strip()
if len(str_) == 0:
return 0
sign_flag = 0
if (lambda x: x.isdigit() or x=='+' or x=='-')(str_[0]):
if str_[0]=='-':
sign_flag = -1
# as the flag is default to + ,actually we don't need
# set flat to 1 if positive sign is given.
# but to make it more clear, we will ...
if str_[0] == '+':
sign_flag = 1
else:
return 0
if sign_flag !=0:
str_ = str_[1:]
else:
sign_flag = 1
ret = 0
for char in str_:
if (lambda x:x.isdigit())(char):
ret += int(char)
ret *= 10
else :
break
ret/=10
ret = ret*sign_flag
if ret >= 2147483647 :
return 2147483647
if ret <= -2147483648:
return -2147483648
return ret