String to Integer (atoi)

Problem

Implement atoi to convert a string to an integer.

Tag

  • Maths
  • String

Thought

This problem is not hard. The only problem is that it contains a lot of different corner cases which need to be considered.

Requirements for atoi:

  • The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.
  • The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.
  • If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.
  • If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

Code

class Solution(object):
    def myAtoi(self, str):
        """
        :type str: str
        :rtype: int
        """
        if len(str) == 0:
            return 0
        result = 0
        string = list(str)
        index = 0
        while string[index] == ' ':
            index += 1
        if string[index] == '+':
            flag = 1
            index += 1
        elif string[index] == '-':
            flag = -1
            index += 1
        else:
            flag = 1
        for i in xrange(index, len(string)):
            if string[i] < '0' or string[i] > '9':
                return result * flag
            num = int(string[i])
            result = result * 10 + num
            if result * flag > 2147483647:
                return 2147483647
            if result * flag < -2147483648:
                return -2147483648
        return result * flag

results matching ""

    No results matching ""