题目

类型:Math
难度:简单
image.png

解题思路

1、特殊情况,当 x < 0 时,x 不是回文数。如果数字的最后一位是 0,x 不是回文数。
2、输入 1221,可以将数字 “1221” 的后半部分从 “21” 反转为 “12”,并将其与前半部分 “12” 进行比较,因为二者相同,得知数字 1221 是回文。

代码

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. // 特殊情况:
  4. // 如上所述,当 x < 0 时,x 不是回文数。
  5. // 同样地,如果数字的最后一位是 0,为了使该数字为回文,
  6. // 则其第一位数字也应该是 0
  7. // 只有 0 满足这一属性
  8. if (x < 0 || (x % 10 == 0 && x != 0)) {
  9. return false;
  10. }
  11. int revertedNumber = 0;
  12. while (x > revertedNumber) {
  13. revertedNumber = revertedNumber * 10 + x % 10;
  14. x /= 10;
  15. }
  16. // 当数字长度为奇数时,可以通过 revertedNumber/10 去除处于中位的数字。
  17. // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
  18. // 由于处于中位的数字不影响回文(它总是与自己相等),所以可以简单地将其去除。
  19. return x == revertedNumber || x == revertedNumber / 10;
  20. }
  21. }