제목 leetcode (파이썬) 설명 : 정수에 문자열 (atoi 함수)

 

이 질문의 분석, 입력 데이터 다음과 같은 경우 :

첫 번째 클래스 : 입력 문자열을 정수로 변환 할 수 없습니다

이 클래스는 다음과 같은 상황을 포함한다 :

  1. 문자열이 비어 입력
  2. (+, -), 공백 이외의 문자는 숫자, 기호 등의 문자로 시작
  3. 뺄셈 기호 문자열의 복수
  4. 기호 디지털로 유지되지 않는다
  5. 어떤 문자열 번호가 없습니다

더 직접적인 상황 반환 0 이러한 유형의

두번째 카테고리 : 입력 문자열 부분을 변환 할 수있다

이러한 경우, 숫자 뒤에 다른 숫자가 아닌 문자는 모든 문자 이후에 다음 기호가 잘못된 위치를 표시,로 표시

세 번째 라운드 : 그것은 모두를 변환 할 수 있습니다

전송 방법이 유형을 설정하는 방법

다음과 같이 참조 코드는 다음과 같습니다

class Solution:
    def myAtoi(self, str):
        """
        :type str: str
        :rtype: int
        """
        raw_str = str
        # set of valid
        valid_set = {
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', ' '
        }
        # set of num
        num_set = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
        # set of sign
        sign_set = {'+', '-'}
        # set of space

        k = 0  # current location
        m = 0  # the number of signs
        p = 0  # the last space location
        n = 0  # the last signs location
        i = 0  # the number of 'num'

        temp_str = ''

        # case1: str is Null
        if len(raw_str) == 0:
            return 0

        # case2: illegal words at begining
        if raw_str[0] not in valid_set:
            return 0

        for s in raw_str:
            if s in sign_set:
                # the sign after num is not valid
                if i > 0:
                    break

                m = m + 1
                n = k
                # case3: if there are more than 1 signs
                if m > 1:
                    return 0
            if s == ' ':
                #  the space after num is not valid
                if i > 0:
                    break
                p = k

            if s in num_set:
                # case4: if the last sign location before last space location
                if p > n and m > 0:
                    return 0
                i = i + 1
                temp_str = temp_str + s

            if s not in valid_set:
                k = k + 1
                break

            k = k + 1

        # case5: have no number in str:
        if i == 0:
            return 0
        else:
            # the num with sign
            if m > 0:
                temp_str = raw_str[n] + temp_str

        covert_int = int(temp_str)

        # overflow
        if covert_int >= 2**31 - 1:
            return 2**31 - 1
        if covert_int <= (-2**31):
            return (-2**31)

        return covert_int


# test
s = Solution()
print(s.myAtoi("-42"))

 

参考:
 
 
 
 
 

추천

출처www.cnblogs.com/sea-stream/p/11361444.html