天天看点

LeetCode笔记——9回文数

题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true
           

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
           

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
           

进阶:

你能不将整数转为字符串来解决这个问题吗?

思路:开始时想到负数一定不是回文数,首先排除负数。接着讲整数转化为整数数组,利用回文字符串的方法进行判断。但是整数转化为整数数组不太会。。。。而且后面才看到题目的要求是不能将整数转化为字符串。上一个题刚做了反转数,因此考虑了下使用反转后的数与原数进行比较。

以下是参考网上大神的代码。首先用判断排除负数和最后一位是0但是本身非0的数,这些一定不是回文数。对于回文数来说,前半部分和后半部分的逆序应该是相同的,关键在于如何判断已经到了数的中间。具体的代码是对参数反转一半,如果反转后得到的数大于原来值的时候,就已经到了该数 的中间。最后的判断条件x==tem||x==tem/10,x==tem是针对x的位数是偶数的情况;x==tem/10是针对x的位数是奇数的情况。这种反转到一半的方法与全部反转再比较最后结果是否相同相比,不会出现数据溢出的情况。

代码:

class Solution {

    public boolean isPalindrome(int x) {

        boolean re=true;

        if(x<0||(x%10==0&&x!=0))

        {

            return false;

        }

        int tem=0;

        while(x>tem)

        {

            tem=tem*10+x%10;

            x=x/10;

        }

        re=(x==tem||x==tem/10);

        return re;

    }

}