美文网首页
09. 回文数

09. 回文数

作者: 衣锦昼行 | 来源:发表于2019-05-14 23:07 被阅读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;
        }
    

    相关文章

      网友评论

          本文标题:09. 回文数

          本文链接:https://www.haomeiwen.com/subject/vybooqtx.html