回文数,当然有很简单的办法,那就是无比强大的 sprintf_s,但是题目限制不能使用额外空间,那么只好按部就班取数的每一位,然后再判断是否相等。
注意,负数无论如何也不能成为回文数,因为前面有负号。
按部就班版:
class Solution {
public:
bool isPalindrome(int x) {
if (x == 0)
return true;
if (x < 0)
return false;
int safe = x;
int count = 0;
while (x) {
x /= 10;
count++;
}
int l = count - 1, r = 0;
while (l >= r) {
if (helper(safe, l) != helper(safe, r))
return false;
l--;
r++;
}
return true;
}
int helper(int x, int i) {
while (i > 0) {
x /= 10;
--i;
}
return x % 10;
}
};
sprintf_s版:
class Solution {
public:
bool isPalindrome(int x) {
char data[13];
sprintf(data, "%d", x);
int l = 0, r = strlen(data) - 1;
while (l <= r) {
if (data[l] != data[r])
return false;
l++;
r--;
}
return true;
}
};
http://oj.leetcode.com/problems/palindrome-number/