LeetCode 09.回文数(Java)
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
看到题目,第一反应就是讲int类型转成StringBuffer类型然后reverse()反转,再转成long类型去比较。不过显然这个样字消耗的资源更多。
public static boolean isPalindrome(int x) {
int num = x;
int revertedNum = 0;
if (x < 0) {
return false;
}
String str = new StringBuffer(x + "").reverse().toString();
long l = Long.parseLong(str);
return l==num;
}
依旧是字符串的方式解决,转换成字符串后再转换成字符数组,因为判断是否为回文数,所以只需要比较前后相对位置是否一直即可。
public static boolean isPalindrome(int x) {
//负数是不是回文数
if (x<0){
return false;
}
String str = String.valueOf(x);
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i]!=chars[chars.length-i-1]){
return false;
}
}
return true;
}
那么还有没有可以不用字符串的形式去判断是不是回文数呢?答案是有的
直接反转整数即可
public boolean isPalindrome(int x) {
int num = x;
int revertedNum = 0;
if (x < 0) {
return false;
}
while (x > 0) {
revertedNum = revertedNum * 10 + x % 10;
x /= 10;
}
return revertedNum == num;
}