第一种(变换类型)
我们把用户输入的int类型数据转换成String字符串,再通过逆序,进行比较。
pubic static boolean isCircle(int x){
String revX = (new StringBuilder(x + ””).reverse().toString();
return (x + “”).equals(revx);
}
至于为什么要使用x + ‘’’’,int类型的数据+‘’‘’可以转换为String类型的数据,记住就习惯了
第二种(先获取用户输入值的位数,找到最左值和最右值,比较两者是否相同,如果都相同了,为回文结构)
public static boolean isCircle(int x){
// 如果输入的值小于0,肯定不为回文结构
if(x < 0){
return false;
}
int div = 1;
//统计位数
while(x/div >= 10){
div *= 10;
}
//逐个对比左右两值
while(x > 0){
int left = x /div;
int right = x % 10;
if(left != right){
return false;
}
x = (x % div)/10;
div /= 100;
}
return true;
}
}
第三种(manacher算法,该算法就是如果是回文结构,肯定存在后半部分和前半部分相同)
public static boolean isCircle(int x){
//rex为后半部分新生成的数据
int rex = 0;
//div用来位数变换
int div = 10;
//这里体会一下,如果末尾数字是0,肯定不会是回文结构的(开头第一个数字怎么可能是0?
if(x == 0 || x%10 == 0 && x != 0 ){
return false;
}
//x之所以要大于rex,是因为如果是单数长度的数字,要把中间的数留给x才会比对成功。
while(x > rex){
rex = res*10 + x%div;
div *= 10;
}
//x == rex/10,就是因为x可能比rex少一位
return x == rex || x == rex/10;
}
如果还有什么想法,可以留言评论~