题目相关
【题目】原题链接
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?
【难度】Easy
Solution
转换为字符串进行判断
该题目是Easy级别,由于负数只有一个负号(-),所以可以直接进行输出false。
该题首先想到的是转换为字符串的形式进行判断。即先转换为字符串,存入数组中,然后再判断该数组中的字符串是否是回文的方法。
由于Linux没有itoa函数,故使用sprintf函数将整数转换为字符。
bool isPalindrome(int x) {
if(x < 0) return false;
char buff[32] = {0};
// linux 下没有itoa函数,使用sprintf
// itoa(x, buff, 10);
sprintf(buff, "%d", x);
int len = strlen(buff);
for(int i = 0; i <= len/2; ++i)
{
if(buff[i] != buff[len-i-1])
return false;
}
return true;
}
通过整数翻转判断
题目的Follow up部分要求不使用转换为字符串的方式进行判断,如果使用首末两位进行比较,但是这样不好操作,实现起来比较麻烦,刚做了进一个数字进行反转的题目(LeetCode-07),故直接求出翻转后的数值,再和原始值进行比较。
bool isPalindrome(int x) {
if(x < 0) return false;
int temp = x; // 原始数据不动,后面还会使用
long long reverse = 0;
while(temp)
{
reverse = reverse * 10 + temp % 10;
temp /= 10;
}
return x == reverse;
}