长期更新,对使用 Java 刷 LeetCode 过程中一些有趣的题的感想和启发。 解题源代码仓库
题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121 输出: true 示例 2:
输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3:
输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶:
你能不将整数转为字符串来解决这个问题吗?
我的思路
首先通过读题,可以有下面的初步结论:
- 0 的反面也是 0 ,返回真。
- 所有负数都返回假。
- 如果个位是 0 ,返回假。 其他的情况就可以把它的翻转数得到后和原数做比较,确定是不是回文数。
但是我们可不可以再简化一下呢?试想,加入一个数是回文数的话,拿他:
- 如果有偶数位,那 左边一半 = 右边一半。
- 如果有奇数位,那 左边一半 - 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;
}
}
本文作者 Auther:Soptq
本文链接 Link: https://soptq.me/2018/09/20/leetCode9/
版权声明 Copyright: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。 Content on this site is licensed under the CC BY-NC-SA 4.0 license agreement unless otherwise noted. Attribution required.
发现存在错别字或者事实错误?请麻烦您点击 这里 汇报。谢谢您!