Easy!
题目描述:
判断一个整数是否是回文数。不能使用辅助空间。
一些提示:
负整数可以是回文数吗?(例如 -1)
如果你打算把整数转为字符串,请注意不允许使用辅助空间的限制。
你也可以考虑将数字颠倒。但是如果你已经解决了 “颠倒整数” 问题的话,就会注意到颠倒整数时可能会发生溢出。你怎么来解决这个问题呢?
本题有一种比较通用的解决方式。
解题思路:
这道验证回文数字的题不能使用额外空间,意味着不能把整数变成字符,然后来验证回文字符串。而是直接对整数进行操作,我们可以利用取整和取余来获得我们想要的数字,比如 1221 这个数字,如果 计算 1221 / 1000, 则可得首位1, 如果 1221 % 10, 则可得到末尾1,进行比较,然后把中间的22取出继续比较。代码如下:
1 class Solution { 2 public: 3 bool isPalindrome(int x) { 4 if (x < 0) return false; 5 int div = 1; 6 while (x / div >= 10) div *= 10; 7 while (x > 0) { 8 int left = x / div; 9 int right = x % 10; 10 if (left != right) return false; 11 x = (x % div) / 10; 12 div /= 100; 13 } 14 return true; 15 } 16 };