逐位取余法(Java)
核心思想: 将整数后一半位数的数字逐位取余,得到每一位数字,相乘10倍并累加,最后判断x的倒序的一半位数的整数与x的正序的一半位数的整数是否相等
class Solution {
public boolean isPalindrome(int x) {
//负数或10的整数倍都不是回文数
if(x < 0 || (x % 10 == 0 && x / 10 != 0))
return false;
//若x是回文数,只需判断x位数的一半即可
int rev_x = 0;//保存x的倒序的一半位数的整数
while(rev_x < x){
int digit = x % 10;//依次获取x后一半的数字
x /= 10;//x依次/10
rev_x = rev_x * 10 + digit;//相乘10倍并累加
}
//判断x的倒序的一半位数的整数与x的正序的一半位数的整数是否相等
if(rev_x / 10 == x || rev_x == x)
return true;
else
return false;
}
}
利用字符串反转(Java)
核心思想: 利用StringBuilder的reverse()直接反转
class Solution {
public boolean isPalindrome(int x) {
//负数或10的整数倍都不是回文数
if(x < 0 || (x % 10 == 0 && x / 10 != 0))
return false;
//利用StringBuilder的reverse()直接反转
String str_x = Integer.toString(x);
StringBuilder sb = new StringBuilder(str_x);
String rev_str_x = sb.reverse().toString();
//直接字符串判断
if(str_x.equals(rev_str_x))
return true;
else
return false;
}
}