문자열을 정수로(atoi)
myAtoi(string s)
함수를 구현합니다(C/C++의 atoi
함수와 유사).myAtoi(string s)
에 대한 알고리즘은 다음과 같습니다.'-'
또는 '+'
인지 확인하십시오. 둘 중 하나인 경우 이 문자를 읽습니다. 이것은 최종 결과가 각각 음수인지 양수인지를 결정합니다. 둘 다 존재하지 않으면 결과가 양성이라고 가정합니다. "123" -> 123
, "0032" -> 32
). 숫자를 읽지 않은 경우 정수는 0
입니다. 필요에 따라 기호를 변경합니다(2단계에서). [-231, 231 - 1]
를 벗어나는 경우 범위에 남도록 정수를 고정합니다. 특히 -231
미만의 정수는 -231
로 고정되어야 하고 231 - 1
보다 큰 정수는 231 - 1
로 고정되어야 합니다. 메모:
' '
만 공백 문자로 간주됩니다. 예 1:
입력: s = "42"
출력: 42
설명: 밑줄이 그어진 문자는 읽은 내용이고 캐럿은 현재 판독기 위치입니다.
1단계: "42"(선행 공백이 없기 때문에 문자를 읽지 않음)
^^
2단계: "42"('-'도 '+'도 없기 때문에 문자를 읽지 않음)
^^
3단계: "42"("42"를 읽음)
^^
구문 분석된 정수는 42입니다.
42는 [-231, 231 - 1] 범위에 있으므로 최종 결과는 42입니다.
예 2:
입력: s = "-42"
출력: -42
설명:
1단계: "-42"(선행 공백을 읽고 무시함)
^^
2단계: "-42"('-'를 읽어서 결과가 음수여야 함)
^^
3단계: "-42"("42"를 읽음)
^^
구문 분석된 정수는 -42입니다.
-42는 [-231, 231 - 1] 범위에 있으므로 최종 결과는 -42입니다.
예 3:
입력: s = "단어 포함 4193"
출력: 4193
설명:
1단계: "4193 with words"(선행 공백이 없기 때문에 문자를 읽지 않음)
^^
2단계: "4193 with words"('-'도 '+'도 없기 때문에 문자를 읽지 않음)
^^
3단계: "4193 with words"("4193"을 읽음, 다음 문자가 숫자가 아니므로 읽기가 중지됨)
^^
구문 분석된 정수는 4193입니다.
4193은 [-231, 231 - 1] 범위에 있으므로 최종 결과는 4193입니다.
제약:
0 <= s.length <= 200
s
는 영문자(소문자와 대문자), 숫자(0-9
), ' '
, '+'
, '-'
, '.'
로 구성됩니다. 해결책:
class Solution:
def clamp(self, val, MIN, MAX):
if val < MIN:
return MIN
if val > MAX:
return MAX
return val
def myAtoi(self, s: str) -> int:
MIN = -1 << 31
MAX = -MIN - 1
sign = None
val = None
for c in s:
if c == "+" or c == "-":
if val != None:
break
if sign == None:
sign = [-1, 1][c == "+"]
else:
return 0
elif 48 <= ord(c) < 58:
d = ord(c) - 48
val = 10 * (val or 0) + d
elif val == None and sign == None:
if c != " ":
return 0
else:
break
return self.clamp((sign or 1) * (val or 0), MIN, MAX)
Reference
이 문제에 관하여(문자열을 정수로(atoi)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/string-to-integer-atoi-aee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)