回文数巧妙解法

203 阅读1分钟

回文数算法

今天看到一个很巧妙的回文数算法,不需要将数字转换成字符串就能判断该数字是否为回文数。

思路:

例如回文数:12321

step1:判断该数字是否为负数,负数代表不可能为回文数

step2:判断该数字是否以0结尾,以0结尾的数字不能为回文数

step3:设 12321 为x,声明 reverted 用于记录上一次截取部分

step4:循环做除法计算;每一次循环获取x的最后一位 + 上次截取位数*10,然后将x/10,x会原来越小

循环解刨:

第一次循环 x = 1232 、reverted = 1

第二次循环 x = 123、reverted = 12

第三次循环 x = 12、reverted = 123

如果x为偶数直接判断x == reverted 、如果x为奇数那就判断 x == reverted /10

package per.yzb.study.leecode;

public class Solution {
    public static void main(String[] args) {
        System.out.println(isPalindrome(12321));
    }

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

        int revered = 0;
        while (x > revered) {
            revered = x % 10 + revered * 10;
            x /= 10;
        }
        /**
         * x == revered || x == revered / 10;
         * 已经包含奇数和偶数的判断
         * */
        return x == revered || x == revered / 10;
    }
}