回文数:
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例:121 是回文数,而 123 不是。 123321 是回文数,而122223不是。
需求:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
方法一:转换字符串
思路:
首先判断边界值,当x为负数的时候肯定不是回文数 例:-121 不等于 121-
当x的值为0 ~ 9 的时候肯定是回文数 例:9 等于 9
其次把给定的整数x转换成字符串,在使用StringBuilder中的反转字符串 revers() 方法进行反转
反转之后在与把x转换的字符串进行比较。
代码:
//方法1:利用把整数转换为字符串 在使用StringBuilder中的reverse()反转字符串方法 进行比较
public static boolean isPalindrome1(int x) {
if (x < 0) return false;//当x小于0的时候肯定不是回文数
if (x >= 0 && x <= 9) return true;//当x是0 ~ 9的时候肯定是回文数
String str = String.valueOf(x);
return new StringBuilder(str).reverse().toString().equals(str);
}
方法二:反转整数x的一半
思路:
首先判断边界值,当x不为0的同时为10的整数倍的时候肯定不是回文数(此时也去掉了为负数的情况)
if (x % 10 == 0 && x != 0) return false;
例:10不等于10 -1不等于1-
其次反转整数的x的一半 例:1221 只需将后两位的 21 反转为 12 在与前2位进行比较
因为两者相同,所以是回文数
当x的长度为偶数情况
用 x (1221)% 10 = 1 得到最后一位1 用 x(1221) / 10 去掉最后一位得到122 在用 x(122) % 10 得倒数第二位2
每得到一位都用 tmp * 10 + 得到的位 例 1 = 1 *1 0 + 1 12 =1 * 10 +2
重点:只有当整数x大于临时变量tmp的时候循环才能继续 当x<=tmp的时候就说明已经把整数x后面一半的数字给反转了。
当x的长度为奇数情况
思路和上面一样只是到最后的时候tmp = 12 因为此时的整数x的长度是奇数所以需要用tmp/10去掉 中间的一位2 再来比较 因为中间的那一位可以看做是一个个位数的回文数
代码:
public static boolean isPalindrome1(int x) {
if (x % 10 == 0 && x != 0) return false;
//当x为10的倍数并且不等于0同时为负数的时候不为回文数
int tmp = 0;
while (x > tmp) {
tmp = tmp * 10 + x % 10;//得到x的最后一位在*10
x = x / 10;//去掉x的最后一位
}
return x == tmp / 10 || x == tmp;//x的长度为奇数或者偶数的情况
}