Leetcode初学——回文数

题目

判断回文数真的是非常常见了,不过我们大多是将其转换为字符串之后再来判断

所以这道题,我们直接做进阶版,不将其转换为字符串

做这道题的时候,我突然想起了 “栈”,我们可以将一个数拆分开来,存到一个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;
    }
}

这个的效率要比上一个高许多,且代码量较少,也简单易懂

发布了25 篇原创文章 · 获赞 3 · 访问量 447

猜你喜欢

转载自blog.csdn.net/qq_39377543/article/details/104010016
今日推荐