9. Palindrome Number
这个其实挺难的,第二次做还是不太会。
题目说的without extra space其实是想表达constant space..
主要就是不让转化为Sring或者重新allocate another array..
正常做的话反着一位一位组成一个新的值,和原来的比较。。
Time: O(lgN)
Space: O(1)
public class Solution {
public boolean isPalindrome(int x) {
int X = x;
int temp = 0;
while (X > 0) {
temp = temp * 10 + X%10;
X /= 10;
}
return temp == x;
}
}
然后reverse过程中是会overflow的,X满足palindrome,肯定不会overflow;否则有可能overflow,但是溢出后返还的数基本不会和想要的相等,所以其实也没啥问题……
另一个没毛病的做法是从两边比较。 先算出有多少位,然后左右 左右检查是不是一样。。
time: O(lgX)
space: O(1)
public class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
int digits = (int)(Math.log(x) / Math.log(10));
int l = 0;
int r = 0;
while (x > 0) {
int pow = (int)Math.pow(10, digits);
l = x / pow;
r = x % 10;
if (l != r) return false;
digits -= 2;
x -= l * pow;
x /= 10;
}
return true;
}
}