9. Palindrome Number

原文链接:https://leetcode.com/problems/palindrome-number/description/。这道题目难度是简单,然后解答也是简单易懂,虽然我还是没能写出正确答案。。。

我的思路

首先,我想到的是将整数转换为一个字符数组,然后再比对对应位置上的字符是否相同,但是题目说了不能使用额外的空间,而且这道题目是简单级别的,答案应该不至于太复杂,所以放弃了。。。
然后,我猜测是不是能根据某种位运算来作出判断呢?然后我看了下回文数 12321 的二进制 0011 0000 0010 0001,可以说是毫无规律可言,然后也放弃了。。。
最后,我想到对 10 做一系列的求除数、余数做判断,然后写出来下面似对非对的代码:

/**
 * Created by clearbug on 2018/2/26.
 */
public class Solution {

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.isPalindrome(233));
        System.out.println(s.isPalindrome(232));
        System.out.println(s.isPalindrome(2332));
        System.out.println(s.isPalindrome(23432));
        System.out.println(s.isPalindrome(234432));
    }


    public boolean isPalindrome(int x) {
        int temp = 0;
        while (x != 0) {
            temp = temp * 10 + x % 10;
            x = x / 10;
            if (temp == x) {
                return true;
            }
            if (temp > x) {
                return false;
            }
        }

        return false;
    }
}

运行分析可以,如果测试数据长度是偶数基本上还能运行正确,但是测试数据长度是奇数就不行了。然后,我以为自己又已经走在错误的道路上了,江郎才尽就去看了下标准答案。没想到的是自己已经接近标准答案了。。。真的好可惜

官方答案

/**
 * Created by clearbug on 2018/2/26.
 */
public class Solution {

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.isPalindrome(233));
        System.out.println(s.isPalindrome(232));
        System.out.println(s.isPalindrome(2332));
        System.out.println(s.isPalindrome(23432));
        System.out.println(s.isPalindrome(234432));
    }


    public boolean isPalindrome(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int revertedNumber = 0;
        while(x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }

        return x == revertedNumber || x == revertedNumber/10;
    }
}
posted @ 2018-02-26 22:05  optor  阅读(136)  评论(0编辑  收藏  举报