回文数
说明
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/pa…
题解
1和2可以对数字 或者是 字符串进行判断 3只能针对于数字
1.暴力破解
public static void main(String[] args) {
int x = 10088001;
System.out.println(demo(x));
}
public static boolean demo(int x){
boolean flag = true;
//转为String 类型 把每个字符都拆分出来
String[] split = (x + "").split("");
//回文数只需要判断前面的一半即可
int sum = split.length / 2;
for (int i = 0; i < sum; i++) {
//如果存在对应位置的数不匹配就表明这不是一个回文数
//例: 1221 第一个和最后一个对应 第二个 和 倒数第二个对应
if (!split[i].equals(split[split.length - 1 - i])) {
flag = false;
return flag;
}
}
return flag;
}
2.暴力破解增强版
public static void main(String[] args) {
int x = 2;
System.out.println(demo(x));
}
public static boolean demo(int x){
if (x == 0) return true;
if (x < 0 || x % 10 == 0) return false;
//转为String 类型 把每个字符都拆分出来
String str = x + "";
String s1 = "";
String s2 = "";
//思想: 通过截取前半部分和后半部分 来进行比较 相同就true 反正false
//奇数
if(str.length() % 2 == 1){
s1 = str.substring(0, str.length() / 2);
s2 = str.substring(str.length() - str.length() / 2, str.length());
//颠倒字符串
StringBuilder stringBuilder = new StringBuilder(s2);
stringBuilder.reverse();
s2 = stringBuilder.toString();
//偶数
}else {
s1 = str.substring(0, str.length() / 2);
s2 = str.substring(str.length() / 2, str.length());
//颠倒字符串
StringBuilder stringBuilder = new StringBuilder(s2);
stringBuilder.reverse();
s2 = stringBuilder.toString();
}
if(s1.equals(s2)){
return true;
}
return false;
3.通过把数拆分为两个数然后进行判断
public static void main(String[] args) {
int x = 10088001;
System.out.println(demo(x));
}
public static boolean demo(int x){
//排除可以确定的数
if (x == 0) return true;
if (x < 0 || x % 10 == 0) return false;
int reversed = 0;
// 例: 1221
// 下面循环的思想就是 把前面的半截放在 X中 后面的半截通过反向取值的方式来保存到 re中
// 把前面的12放在X中 然后把后面的21 通过反向取值再拼接的方式来保存在re中 re = 12
// 第一次循环 re = 1 (获取到最后一位) x = 122
// 第二次循环 re = 1 * 10 + 2 = 12 x = 12
//最后就进行判断 返回
while (x > reversed) {
reversed = reversed * 10 + x % 10;
//每次都把最后一位的数给排除出去
x /= 10;
}
return x == reversed || x == reversed / 10;
}