问题:
判断整数是否是回文。PS:回文:把相同的词汇或句子 ,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。
要求:不能将整数转化成字符串!
示例1:
输入: 121
输出:true
说明:从左到右,显示121;从右到左,显示121;因此为回文。
示例2:
输入: -121
输出:false
说明:从左到右,显示-121;从右到左,显示121-;因此不是回文。
示例3:
输入: 123
输出:false
说明:从左到右,显示123;从右到左,显示321;因此不是回文。
示例4:
输入: 10
输出:false
说明:从左到右,显示10;从右到左,显示01;因此不是回文。
原本的解决方案:
public boolean oldCode(int x) {
if(x < 0){
return false;
}
if(x % 10 == 0){
return false ;
}
int result = 0;
int xDao = x ;
while (x != 0){
int tail = x % 10;
int newResult = result * 10 + tail;
result = newResult;
x = x / 10;
}
if(result == xDao){
return true;
}
return false;
}
@Test //测试
public void testName() throws Exception {
int a = 121121321 ;
boolean palindrome = oldCode(a);
System.err.println(palindrome);
}
输出结果
false
新的优化方案:
/**
* 比较x中的一半数字,不需要处理溢出
* @param x
* @return
*/
public boolean newCode(int x) {
if (x<0 || (x!=0 && x%10==0)) return false;
int rev = 0;
while (x>rev){
rev = rev*10 + x%10;
x = x/10;
System.err.println("x:"+x+" rev:"+rev);
}
return (x==rev || x==rev/10);
}
@Test //测试
public void testName() throws Exception {
int a = 121121321 ;
boolean palindrome = newCode(a);
System.err.println(palindrome);
}
输出结果
false