问题描述

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入:121 输出:true

示例 2:

输入:-121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。

进阶:
你能不将整数转为字符串来解决这个问题吗?

Related Topics

数学

数学解法:

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. int num = 0, y, l = x;
  4. while (x > 0) {
  5. y = x % 10;
  6. num = num * 10 + y;
  7. x /= 10;
  8. }
  9. return num == l;
  10. }
  11. }

优化:

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. //首先排除负数和
  4. if (x < 0 || (x % 10 == 0) && x != 0) {
  5. return false;
  6. }
  7. int num = 0;
  8. //取出后半段数字进行翻转。
  9. while (x > num) {
  10. num = num * 10 + x % 10;
  11. x /= 10;
  12. }
  13. //位数要判断奇偶的情况
  14. return num == x || x == num / 10;
  15. }
  16. }