题目描述
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Input: 121
Output: true
Example 2:
Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:
Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Follow up:
Coud you solve it without converting the integer to a string?
解题方案
1 逆序整数
由于是数字,判断回文只需要求出倒过来的数字,判断两者是否相等,负数一定不是回文
bool isPalindrome(int num){
int a=num;
if (a<0)
return false;
//int yu=0;
int temp=0;
while(a){
temp=10*temp+a%10;
a=a/10;
}
if(num==temp){
return true;
}
return false;
}
2 左右指针
左指向当前数字最高位,右指向当前数字最末尾
bool isPalindrome1(const int a) {
if (a < 0)
return false;
int num = a;
int n = 0;
while (num != 0) {
num /= 10;
n++;
}
int left = 0;
int right = 0;
num = a;
while (n > 1) {
left = num / (pow(10, n - 1));
right = num % 10;
if (left != right) {
return false;
}
num = (num - left * pow(10, n - 1) - right) / 10;
n -= 2;
}
return true;
}