Determine whether an integer is a palindrome. Do this without extra space.
判断一个数是否是回文数,不能用额外的空间
我第一次做的时候,没有考虑到不能用额外的空间(空间复杂度为(n)),用了一个字符串来保存数字,而且题目的设定是
负数不是回文数
class Solution { public: bool isPalindrome(int x) { string s; if(x<0)return false; while (x) { s.push_back(x % 10+48); x /= 10; } for (int i = 0;i < (int(s.size()) - 1 - i);++i) { if (s[i] != s[s.size() - 1 - i])return false; } return true; } };
下面是改进的方法:空间复杂度为O(1)
class Solution { public: bool isPalindrome(int x) { if (x < 0)return false; if(0==x)return true; int div = 1000000000; int cnt=10; for (;!(x / div);div /= 10,--cnt); cnt=cnt/2; while (x&&cnt--) { if (x / div%10 != x % 10)return false; div /= 100; x /= 10; if(x<10)return true; } return true; } };