title
정수 x를 입력합니다. x가 팔린드롬 정수이면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
팔린드롬은 정방향과 역방향 모두 같은 순서로 읽는 정수를 말합니다.
- 예를 들어, 팔린드롬이 아니라 팔린드롬입니다.
예 1:
입력: x= 121
출력: true
예 2:
입력: x= -121
출력: false
설명: 왼쪽에서 오른쪽으로 읽으면 -121입니다. 오른쪽에서 왼쪽으로 읽으면 121-입니다. 따라서 팔린드롬이 아닙니다.
예 3:
입력: x= 10
출력: false
설명: 오른쪽에서 왼쪽으로 읽는 것은 01입니다. 따라서 팔린드롬이 아닙니다.
팁:
-231 <= x <= 231 - 1
고급: 정수를 문자열로 변환하지 않고 이 문제를 해결할 수 있나요?
문제 해결을 위한 아이디어
솔루션 1: 수학적 방법
단계:
- 음수 및 첫 자리가 0인 숫자는 제외합니다.
- 원래 숫자의 역수가 원래 숫자보다 작지 않을 때까지 단계적으로 역수를 구성합니다.
- 원래 숫자가 반전된 숫자와 같거나 반전된 숫자의 마지막 숫자를 제거하면 원래 숫자와 같은 경우 팔린드롬이라고 합니다.
class Solution:
def isPalindrome(self, x: int) -> bool:
# 음수 또는 마지막 자리가 0인 숫자는 팔린드롬이 아닙니다.
if x < 0 or (x % 10 == 0 and x != 0):
return False
reversed_num = 0
while x > reversed_num:
reversed_num = reversed_num * 10 + x % 10
x //= 10
# 원래 번호와 역수가 같거나 역수에서 마지막 숫자가 제거된 경우 원래 번호가 같으면 반향 번호입니다.
return x == reversed_num or x == reversed_num // 10
해결 방법 2: 문자열 방법
단계:
- 정수를 문자열로 변환합니다.
- 문자열이 그 역과 동일한지 확인합니다.
class Solution:
def isPalindrome(self, x: int) -> bool:
s = str(x)
return s == s[::-1]
실행
sol = Solution()
print(sol.isPalindrome(121)) # : True
print(sol.isPalindrome(-121)) # : False
print(sol.isPalindrome(10)) # : False
요약
두 가지 방법 모두 정수가 아이암빅 숫자인지 여부를 판단하는 데 효과적입니다. 수학 방식은 추가 공간을 사용하지 않으므로 공간 효율성 측면에서 문자열 방식보다 낫습니다. 그러나 문자열 메서드의 코드가 더 간결하고 이해하기 쉽습니다. 실제로 공간 효율성이 문제가 되지 않는다면 일반적으로 문자열 방식이 더 빠르고 편리한 선택입니다. 공간 제약이 있거나 허용되지 않는 경우




