题设
Determine whether an integer is a palindrome. Do this without extra space.
要点
- 反转一半对比
要判断是不是回文数字,一个思路是把int转为string处理。但是题目限制了空间,所以不可行;
还有一种思路是找出这个数字的反转数,判断是否相等。但是之前的题目得知int反转可能会溢出;
解题思路是把数字的最后一半反转。
例如:
对于1221,通过反转后面两位,发现12==12,所以是回文数字;而1231,13!=12,就不是回文数字;
对于12321,反转后面3位,有123=123,也是回文数字。
在寻找反转数的过程中,一旦发现本次循环得到的反转数和此时的x值相等,就返回true。
注意0-9都是反转数,负数不是反转数;10、20这种≥10且%10==0的肯定也不是回文数。
public static boolean isPalindrom(int x){
if(x >= 0 && x < 10)
return true;
if(x < 0 || x % 10 == 0) // 注意最后一位为0的情况,肯定不是回文数,但是会对后面产生影响
return false;
int value = x;
int result = 0;
while(value >= 10){
int tail = value % 10;
result = result * 10 + tail;
if(result == value) // 1221这种偶数位情况
return true;
value /= 10;
if(result == value) // 12321这种奇数位情况
return true;
}
return false;
网友评论