今天是leetcode上比较简单一道--回文数
给一个int数 x ,正序和倒序是一样的则叫回文数 如 123 ,12321。
根据第一印象我们可以想到用Java自带的StringBuilder 类中 reverse()方法
public boolean isPalindrome1(int x) {
StringBuilder res = new StringBuilder();
String str = String.valueOf(x);
res.append(str);
if(res.reverse().toString().equals(str)){
//判断转换后的与原来的是否一致
return true;
}else {
return false;
}
}
然而着实简单了些,而且利用StringBuilder类,又需要了额外的空间,效率降低。我们需要考虑不用转成String来实现它
//当x < 0 有负号肯定不符合,同样如何是10的倍数尾数为0 只有0符合
public boolean isPalindrome2(int x) {
if(x <0 || (x %10==0 && x !=0)){
return false;
}
int reverseX = 0;
//x位数在减少 reverseX位数在增大,x为偶数长度,reverseX 和x 长度相等
// x为奇数函数那么 会有 reverseX * 10 + 0;
while (x > reverseX){
//整数里 x% 10得到尾数
//这样 得到反转的数字 reverseX
// x/= 10 代表x去掉末尾的数字,类似于弹栈
reverseX = reverseX * 10 + x %10;
x = x /10;
}
return reverseX == x || x == reverseX /10;
}
可以用整数的% 和/ 逐个谈出数字 然后比较