这是我参与新手入门的第2篇文章
一、题目描述
9. 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
二、思路分析
- 回文数就是数字是对称性质的。常规解法就是直接将数字进行反转然后和原数字进行比对。将数字进行反转在Java中实现也很简单。
- 实现反转就是先将数字转成字符串。利用Java自带的反转得到结果。
public boolean isPalindrome(int x) {
String str = String.valueOf(x);
return new StringBuilder(str).reverse().toString().equals(str);
}
- 这种比较投机取巧,下面我们来通过算法分析实现回文数判定!
- 首先,我们可以针对特殊情况进行判定这样可以快速判定,提高程序效率。比如说对于个位数都满足回文数的要求。
- 其次对于负数来说就不是回文数,因为一个负数只会出现在数字前部不会出现在其他地方。
- 所有个位数是0的都不是回文数,因为各位为0 的情况如果是回文数那么第一位必然是0,我们知道自然数中不会是0开头的。
- 以下取自leetcode官网分析图片。从图片中我们也能够看得出我们需要针对奇偶性进行区别对待!
- 我们没必要一直反转到结束,反转的数字从0开始,一开始比源数字小,知道反转数字大于等于源数字表示我们无需反转了。
public boolean isPalindrome2(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int result = 0;
while (result < x) {
result = result * 10 + x % 10;
x /= 10;
}
return x == result || x == result / 10;
}
三、总结
- 回文数是leetcode简单之一,也是面试常考点。主要考察我们对算法的时间空间复杂度的了解。