LeetCode9 回文数 Palindrome Number
题目描述
题目地址:https://leetcode-cn.com/problems/palindrome-number/
题目难度:简单
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例
示例1:
输入: 121
输出: true
示例2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
分析
这道题逻辑上看起来很好处理,只需要遍历把头和尾一直比较,只要相等就继续,否则就退出。这道题主要需要注意最中间1个数和2个数的情况。在写这篇博客的时候我又涌起一种思路,就是直接把原先的串倒过来,然后直接比较是否相同
解答1:字符比较
public boolean isPalindrome(int x) {
String y = String.valueOf(x);
int length = y.length();
int m = length / 2;
for (int i = 0; i < m; i ++) {
if (y.charAt(i) != y.charAt(length - i - 1)) {
return false;
}
}
return true;
}
耗时54ms,击败70.32%的提交记录
解答2:字符串比较
public boolean isPalindrome1(int x) {
String y = String.valueOf(x);
int length = y.length();
String z = "";
for (int i = length - 1; i >= 0; i--) {
z = z + y.charAt(i);
}
return z.equals(y);
}
耗时73ms,击败53.13%的提交记录
大佬解答
public boolean isPalindrome2(int x) {
if (x<0 || (x!=0 && x%10==0)) {
return false;
}
int rev = 0;
while (x>rev){
rev = rev*10 + x%10;
x = x/10;
}
return (x==rev || x==rev/10);
}
耗时48ms,但我在提交记录里看到是6ms,应该是网络问题导致的,处理起来性能应该是差不多的。
相似题目
回文链表
总结
这道题目总体来说很简单,主要就是效率的问题