Leetcodeleetcode

8. String to Integer (atoi)

2017-10-26  本文已影响12人  ciantian

最近再刷leetcode,除了链表之外的都用python 实现,贴出一些代码,希望指正.

问题描述:

字符转为整数,问题不难,不过需要注意的情况很多.
比如:

  1. 两边或者中间有空格 两边的去除空,中间的返回空之前的字符.
  2. +-123这种 直接返回0
  3. -12a12这种 返回-12
  4. 越界 超过pow(2,31)
  5. 整数最大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"))

上一篇下一篇

猜你喜欢

热点阅读