https://leetcode.com/problems/palindrome-number/description/
Solution 1. Only compare half digits (fastest). Corner cases are (x!=0 && x%10 == 0).
bool isPalindrome(int x) {
if(x<0 || (x!=0 && x%10==0)) return false;
int y = 0;
while(x>y) {
y = y*10 + (x%10);
x /= 10;
}
return x == y || (x == y/10);
}
Solution 1.1 Reverse whole number
bool isPalindrome(int x) {
if(x<0) return false;
int a = x;
int y = 0;
while(a) {
y = y*10 + (a%10);
a /= 10;
}
return x == y;
}
Solution 2. Covert to string and compare it to its reverse.
bool isPalindrome(int x) {
if(x<0) return false;
string s = to_string(x);
string t = s;
reverse(begin(t),end(t));
return s == t;
}
Solution 2.1 Two pointers for string.
bool isPalindrome(int x) {
if(x<0) return false;
string s = to_string(x);
for(int i=0, j=s.size()-1;i<j; i++,j--){
if(s[i] != s[j]) return false;
}
return true;
}
No comments:
Post a Comment