长期更新,对使用 Java 刷 LeetCode 过程中一些有趣的题的感想和启发。 解题源代码仓库

题目

题目链接

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

示例 1:

输入: 121 输出: true 示例 2:

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

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

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

我的思路

首先通过读题,可以有下面的初步结论:

  1. 0 的反面也是 0 ,返回真。
  2. 所有负数都返回假。
  3. 如果个位是 0 ,返回假。 其他的情况就可以把它的翻转数得到后和原数做比较,确定是不是回文数。

但是我们可不可以再简化一下呢?试想,加入一个数是回文数的话,拿他:

  1. 如果有偶数位,那 左边一半 = 右边一半。
  2. 如果有奇数位,那 左边一半 - 1 = 右边一半 - 1

所以这样我们就可以将复杂度缩小一半。

我的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//解决方法
class Solution {
    public boolean isPalindrome(int x) {
        if (x == 0) return true;
        if (x < 0) return false;
        if (x % 10 == 0) return false;
        int reverse = 0;
        int last = 0;
        while (x > reverse){
            last = x % 10;
            reverse = reverse * 10 + last;
            if (reverse == x) return true;
            x /= 10;
        }
        if (reverse == x) return true;
        return false;
    }
}


发现存在错别字或者事实错误?请麻烦您点击 这里 汇报。谢谢您!