Determine whether an integet is a palindrome. Do this without extra space.
这个题目要求不使用额外空间判断一个整数是不是回文数字。
我们知道判断一个字符串是不是回文字符串,那么我们首先想到的是通过将整型数字变成字符串处理,然后依次判断首尾字符是否相同来判断是否是回文串。但是这样会带来不必要的空间开销,不满足题目要求。那么有没有好的方法呢?
首先:负数肯定不是回文数字,因为该数字前面有负号,而且仅有一个负号,所以肯定不会成为回文数字的;
其次:1位数肯定是回文数字;
再次:当数字大于1位,我们可以借鉴判断回文字符串的方式,逐渐判断首尾数字是否相同,如果首尾不同,则肯定不是回文数字;如果是,则判断第二位和倒数第二位是否相同,依次判断下去,如果都相同,则是回文数字;
最后:判断最高位和最低位是关键,最高位可以通过“除法(/)”获得,最低位可以通过“取余(%)"获得,获得最高位、最低位后,需要将数字的最高位和最低位除掉变成新的数字再次判断最高位和最低位。
Java代码如下:
<span style="color: rgb(51, 51, 51);">public boolean isPalindrome(int x) {
if(x < 0)
return false;
if(x == 0)
return true;
int index = 1;
while(x/index >= 10) {
index *= 10;
}
while(x > 0) {
if(x/index != x%10)
return false;
</span><span style="color:#ff0000;"><strong>x %= index; //减去数字的最高位
index /= 100; //每次减去两位数
x /= 10; //减去数字的最低位 </strong></span><span style="color:#333333;">
}
return true;
}</span>