이 질문의 분석, 입력 데이터 다음과 같은 경우 :
첫 번째 클래스 : 입력 문자열을 정수로 변환 할 수 없습니다
이 클래스는 다음과 같은 상황을 포함한다 :
- 문자열이 비어 입력
- (+, -), 공백 이외의 문자는 숫자, 기호 등의 문자로 시작
- 뺄셈 기호 문자열의 복수
- 기호 디지털로 유지되지 않는다
- 어떤 문자열 번호가 없습니다
더 직접적인 상황 반환 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"))
参考: