回文数 题解(java)

1.题目

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

示例 1:
输入: 121
输出: true

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.题解
①思路:
首先由题意可知,所有负数不为0但个位数为0的数都不是回文数,将他们筛掉。
将数x的后半部分反转与前半部分比较,这里要注意,如果是奇数位的数,需要用上一次循环的x(题中为proc,比当前x的多一位)与反转数reverse判等,偶数位的数则直接用当前x与reverse比较,相等则为回文数返回true,不相等则不是回文数返回false。
②代码

class Solution {
    public boolean isPalindrome(int x) {
        int digit=0,reverse=0,proc=0;
        //digit为分离出的个位数,reverse为后半部分反转数,proc为上一次循环中x的数值
        if(x<0||(x%10==0&&x!=0))
        //易知所有负数,个位数为0但是不为0的数都不是回文数
            return  false;
        while(reverse<x){
        //当后半部分反转数reverse大于等于x时跳出循环
        //若x是奇数位的数,后半部分反转数reverse比x多一位
        //若x是偶数位的数,后半部分反转数reverse与x位数相同
            digit=x%10;
            reverse=reverse*10+digit;
            proc=x;
            x/=10;
        }
        if(proc==reverse||x==reverse)
        //若x是奇数位的数,则当前x比reverse少一位,需要用上一次循环中的x即proc与reverse比较
        //若x是偶数位的数,则当前x与reverse位数相同,直接比较即可
            return true;
        else
            return false;

    }
}

你可能感兴趣的:(LeetCode题解,leetcode,java,算法)