8. String to Integer (atoi)

LONGNEW·2023년 7월 5일
0

CP

목록 보기
113/155

https://leetcode.com/problems/string-to-integer-atoi/description/

input :

  • s

output :

  • s 문자열의 첫단어가 가지고 있는 숫자를 리턴하시오.

조건 :

  • 첫 단어가 숫자가 아닌 경우에는 0을 리턴한다.
  • 숫자는 "+, -" 또는 숫자로 시작된다.
  • 숫자가 int의 범위를 넘어갈 경우에는 내부로 조정한다.

Solution explain : Solution1

idea

  • strip()을 통해 우선 공백을 제거한다.
  • 문자열이 존재하는 지를 우선 확인한다.
  • 문자열의 첫 단어가 "+, -, 또는 숫자" 인지 확인한다.
  • 반복문을 돌면서 해당 문자들을 다 옮긴다.
  • float, int로 형변환을 하며 숫자로 변환한다.
  • int의 범위로 조정하기 위해 min, max를 수행한다.

주의

  • float, int와 같은 형변환에서 error가 발생한다면 "-, +"만 있는 문자열 일 수도 있다. try-except를 사용할 것을 추천한다.
class Solution:
    def myAtoi(self, s: str) -> int:
        s = s.strip()
        if not s:
            return 0

        if not (s[0] in ["-", "+"] or 48 <= ord(s[0]) < 59):
            return 0

        ret = s[0]
        s = s[1:]
        while s and 48 <= ord(s[0]) < 59:
            ret += s[0]
            s = s[1:]

        try:
            ret = float(ret)
            ret = int(ret)
            ret = max(-2 ** 31, ret)
            ret = min(2 ** 31 - 1, ret)
        except:
            return 0

        return ret

s = Solution()
# print(s.myAtoi("  -0012a42"))
# print(s.myAtoi("3.14159"))
print(s.myAtoi("42"))
print(s.myAtoi("   -42"))
print(s.myAtoi("4193 with words"))
print(s.myAtoi("words and 987"))
print(s.myAtoi("00000-42a1234"))

0개의 댓글