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?
这道题还算简单,有以下几个点需注意:
- 负数不是回数,所以只要是负数直接返回false。
- 对正数进行反转操作,判断是否于原数相同,相同即为回数。
代码如下:
class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
int temp = x;
int ret = 0;
while(temp!=0){
int mod = temp%10;
temp = temp/10;
ret = ret*10 + mod;
}
if(ret == x) {
return true;
}else{
return false;
}
}
}
不过上面的代码没有考虑溢出的问题,不知道为啥提交居然过了。接下来写一种不用考虑溢出的方法,就是取出这个数的第一个数字和最后一个数字比较,然后掐头去尾,比较剩下的。
class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
int div = 1;
while(x/div>=10){
div*=10;
}
while(x>0){
int first = x/div;
int last = x%10;
if(first != last){
return false;
}
x=(x%div)/10;//掐头去尾
div/=100;//去了两位数,div也要跟着变
}
return true;
}
}