判断一个整数是否是回文(不要使用额外的空间)
1. 转换为字符串来比较
public boolean isPalindrome(int x)
{
if (x < 0)
return false;
String s = String.valueOf(x);
for (int i=0; i<s.length()/2; i++)
{
if (s.charAt(i) != s.charAt(s.length()-i-1))
{
return false;
}
}
return true;
}
2. 互换高低位,判断与原数是否相等
public boolean isPalindrome(int x)
{
int xx = x;
if (x < 0)
return false;
long reverse = 0; // 反转后的数字
while (x > 0)
{
reverse = reverse * 10 + x % 10;
x /= 10;
}
// 如果反转后的数字超出最大正数范围则必然不是回文串(假定输入合法)
if (reverse > Integer.MAX_VALUE)
return false;
// 如果反转后的整数与原数相等
if ((int)reverse == xx)
{
return true;
}
return false;
}
3. 反转一半的数字
将输入的整数进行反转,可能面临数值溢出的问题。
如果一个数字是回文数,那么我们反转后一半的数字,所得到的结果应该与前一半的数字相同。
public boolean isPalindrome(int x)
{
// 如果x是负数,必定不是回文数;
// 如果x的最后一位是0,则x必定是0
if (x < 0 || (x % 10 == 0 && x != 0))
{
return false;
}
int revertedNumber = 0;
// 当原始数小于逆数时,就意味着我们处理了一半的数字。
while (x > revertedNumber)
{
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
System.out.println(revertedNumber +" "+x);
}
return x == revertedNumber || x == revertedNumber/10;
}