题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例
输入:x = 121
输出:true
输入:x = -121
输出:false
解释:从左向右读, 为-121。 从右向左读, 为121-。因此它不是一个回文数。
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:-2^31 <= x <= 2^31 - 1
解决方案
方法一:转为字符串
class Solution {
public boolean isPalindrome(int x) {
if(x >= 0) {
String str = String.valueOf(x);
int length = str.length();
if(length > 1) {
for(int i=0; i< str.length()/2; i++) {
String begin = str.substring(i, i+1);
String end = str.substring(length-1-i, length-i);
if(!begin.equals(end)) {
return false;
}
}
}
return true;
}
return false;
}
}
方法二:直接通过计算取值
这里有两个方案:
麻烦一点的是先通过递归求出x的长度(10的几次方),然后依次取开头和结尾比较,并同时去掉开头和结尾;一直做这个操作。其实这种方式跟转为字符串的思想一模一样,只是操作不一样。
简单一点的方式是我在遍历求长度的时候想出来的,将x一直除以10取余,再将得到的y乘以10一直累加得到x反转后的数,这样就只要比较两个数就可以了。
class Solution {
public boolean isPalindrome(int x) {
if(x >= 0) {
int y = 0;
int x1 = x;
while(x1 >= 10) {
y = y*10 + x1%10;
x1 = x1/10;
}
y = y*10 + x1;
return x==y;
}
return false;
}
}