09. 回文数

2019-05-14  本文已影响0人  衣锦昼行

题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解题思路1:回文串的概念大家都是熟悉的了,121,1221都是回文串,首先考虑这么一个思路,它读进来的是一个数字,所以负数肯定不是回文串,这里可以做一个判断,对所有负数返回false,然后使用额外的数组,对数字进行拆分,随后进行回文串的判定。

public boolean isPalindrome(int x) {
        if(x<0)
            return false;
        ArrayList<Integer>arr = new ArrayList<>();
        while(x!=0){
            int flag=x%10;
            arr.add(flag);
            x/=10;
        }
        for(int i=0;i<arr.size();i++){
            if(arr.get(i)!=arr.get(arr.size()-1-i))
                return false;
        }
        return true;
    }

解题思路2:但是解题思路1的一个弊端是它需要维护一个额外的数组空间,即使这个数组可能很小,那我们思考一下有没有什么方法可以不使用额外的数组,我们从回文的定义出发,发现如果将回文从中间切开,并将后半部分翻转,若它是一个回文串,那么翻转后两边必相等。

public boolean isPalindrome(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }//如果是负数,则一定不是回文数,如果数字是10的倍数,那么只有0符合条件。
        int y=0;
        while(x>y){
            y=y*10+x%10;
            x/=10;
        }
        if(x == y||x==y/10)//输入回文数是奇数,则去除y的最后一位数字,因为奇数位和自己对称,直接去除不影响最后结果
            return true;
        else
            return false;
    }
上一篇 下一篇

猜你喜欢

热点阅读