题目
判断回文数真的是非常常见了,不过我们大多是将其转换为字符串之后再来判断
所以这道题,我们直接做进阶版,不将其转换为字符串
做这道题的时候,我突然想起了 “栈”,我们可以将一个数拆分开来,存到一个list中,然后取它的最后一位数存到另一个list中,之后比对两个list是否相同(如果奇数就比对前n/2个)
所以我写出如下代码:
class Solution {
public boolean isPalindrome(int x) {
if( x<0 ) return false;
if(x/10==0) return true;
if( x%10==0) return false;
int temp=x;
int length=0;
List <Integer> list1=new ArrayList<>();
List <Integer> list2=new ArrayList<>();
while(temp!=0){
list1.add(temp%10);
temp=temp/10;
length++;
}
for(int i=0;i<length/2;i++){
list2.add(list1.get(list1.size()-1-i));
if(list1.get(i)!=list2.get(i)) return false;
}
return true;
}
}
前三个判断条件是直接对特殊情况进行判断,如小于0的数,一位数,以及最后一位是0的整数
运行结果如下:
在结尾呢,再给大家分享一个我刚学到的判断回文数的方法,虽然是用的string类型
///简单粗暴,看看就行
class Solution {
public boolean isPalindrome(int x) {
String reversedStr = (new StringBuilder(x + "")).reverse().toString();
return (x + "").equals(reversedStr);
}
}
//作者:MisterBooo
//链接:https://leetcode-cn.com/problems/palindrome-number/solution/dong-hua-hui-wen-//shu-de-san-chong-jie-fa-fa-jie-ch/
//来源:力扣(LeetCode)
这个方法的关键在reverse(),这个方法的用处就是将输入流倒序输出
假如输入流是 “123456”,那么倒序输出后“654321”
如果x是回文数的话,那么倒序后的数和原数必定相等。
不过实际使用效率似乎并不是很高
下面给大家推荐一个效率较高的
class Solution {
private boolean isPalindrome(String s) {
int i=0;
int j=s.length()-1;
while (i<j){
if (s.charAt(i++)!=s.charAt(j--))return false;
}
return true;
}
}
这个的效率要比上一个高许多,且代码量较少,也简单易懂