判断一个数字是否位回文,不能使用额外的空间。
最简单的就是转成字符串,然后来判断。
但是这题限制了不能用。
可以考虑就是把数字反转,然后看是否相等,但是又有个问题就是,反转了可能溢出。。。
我们每次取数字的头和尾的数字来比较!
设数字为x
末位= x % 10
首位=x / div
这个div是我们算出来的
int div = 1;
while(x / div >= 10) div *= 10
这样就能保证能取到首位的数字了。
比较之后再去掉首位的数字,继续!
(x%div)/10
那么,div就要除100,因为少了两位
div /= 100
class Solution { public: bool isPalindrome(int x) { // Note: The Solution object is instantiated only once and is reused by each test case. if(x < 0) return false; int div = 1; while(x / div >= 10) div *= 10; while(x){ int l = x / div; int r = x % 10; if(l != r) return false; x = (x % div ) / 10; div /= 100; } return true; } };
by 1957