귤귤나무 일지
LeetCode - 9. Palindrome Number 본문
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || x % 10 == 0 && x != 0) {
return false;
}
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
if (x == revertedNumber || x == revertedNumber / 10)
return true;
return false;
}
};
Palindrome Number: 숫자를 거꾸로 읽어도 똑같은 숫자
처음에는 to_string을 사용하여 string으로 만든 후, 뒤집어서 둘이 같은지 검사.
하지만 이렇게 하면 시간이 오래 걸림.
Follow up: Could you solve it without converting the integer to a string?
결국, 또 해답을 봤다..
기존에 있는 숫자 x를 1의자리수부터 새로운 변수에 append한다.
예를 들어 12321의 경우,
1) x = 12321, y = 0
2) x = 1232, y = 1
3) x = 123, y = 12
4) x = 12, y = 123
이런 식으로 x가 y보다 작아질 때까지 수행한다.
그리고 x == y(x의 길이가 짝수) 또는 x == y/10(x의 길이가 홀수)일 때 true를 반환하도록 하였다.
또한, 문제에 있는 constraint인, x가 음수일 때, 또는 x가 0으로 끝나면서 0이 아닐 때(ex. 10, 320)는 바로 false를 반환하도록 했다.
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x != 0 && x % 10 == 0)) {
return false;
}
int reversed = 0;
while (x > reversed) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
return (x == reversed) || (x == reversed / 10);
}
};
Key Idea
string을 사용하지 않고 풀기. x의 1의자릿수부터 값을 append.
'Programming > Coding Problems' 카테고리의 다른 글
LeetCode - 2357. Make Array Zero by Subtracting Equal Amounts (0) | 2024.11.11 |
---|---|
LeetCode - 1710. Maximum Units on a Truck (0) | 2024.11.11 |
LeetCode - 1603. Design Parking System (0) | 2024.11.11 |
LeetCode - 13. Roman to Integer (0) | 2024.11.11 |
LeetCode - 1. Two Sum (0) | 2024.11.08 |