Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space.
首尾比较法
复杂度
O(Length) 时间 O(1) 空间, Length为所求Integer的长度
思路
先求Integer (记为x) 的长度len
根据长度制造掩码 (mask)
-
循环当:当最高位等于最低位 && x还有数字等待判断(x != 0)
最高位通过掩码和整除取得(646/100=6),最低位通过取余取得(646%10=6)
判断过后更新掩码(mask/=100),删掉最高位(x%=mask),删掉最低位(x/=10)
注意
求Integer长度的utility:
int len = 0;
while (x != 0) {
len++;
x /= 10;
}
return len;
如何取得一个Integer的最高位?假设x = 688
答:x / mask. 设置一个和x位数一样的mask,mask = 100,然后用x/mask,表示x里面有几个mask,即是最高位数字. 688里有6个100,即为6.
如何删去一个Integer的最高位?假设x = 688
答:x = x % mask. 还是用这个mask,用 x = x % mask 即可得到688除以100的余数,这个余数其实等于删掉了x的最高位剩下的数.
如何取得一个Integer的最低位?假设x = 688
答:x % 10.
如何删去一个Integer的最低位?假设x = 688
答:x = x / 10.
代码
public class Solution {
public boolean isPalindrome(int x) {
if (x < 0)
return false;
int len = getIntegerLength(x);
int mask = (int)Math.pow(10, len - 1);
while (x != 0) {
if (x % 10 != x / mask)
return false;
x %= mask; //去最高位
x /= 10; //去个位
mask /= 100; //mask要丢掉两个零,不是一个!
}
return true;
}
public int getIntegerLength(int x) {
int len = 0;
while (x != 0) {
x /= 10;
len++;
}
return len;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。