确定int是否为Java回文?

时间:2018-07-11 06:09:40

标签: java

我正在处理LeetCode上的一个问题,该问题询问以下问题:在不将整数转换为字符串的情况下确定整数是否是回文。我能够提出自己的算法来确定回文,但是如果不将整数转换为字符串就无法提出。所以我在Internet上遇到了以下代码:

public boolean isPalindrome(int x) {
    if (x < 0)
        return false;

    // initialize how many zeros
    int div = 1;
    while (x / div >= 10) {
        div = div * 10;
    }

    while (x != 0) {
        int left = x / div;
        int right = x % 10;

        if (left != right)
            return false;

        x = (x % div) / 10;
        div = div / 100;
    }   
    return true;
}

我多次浏览代码以查看代码的作用,但是我很难理解这个人如何提出这种逻辑。现在,我知道除法和取模的工作原理。但是,这部分很模糊:

// initialize how many zeros
int div = 1;
while (x / div >= 10) {
    div = div * 10;
}

我相信这个人正在尝试确定小数位?

他们代码的下一个片段部分,我完全困惑于他们如何提出这一点。我的意思是……这是一些简单的数学技巧,显然我没有给出解释吗?简单来说,他们在这里做什么?他们如何确定10和100的除数?

x = (x % div) / 10;
div = div / 100;

我感谢您提供任何有助于我理解的解释。预先感谢。

v / r,

艾伦

2 个答案:

答案 0 :(得分:2)

让我们以x = 12321

然后

int div = 1;
while (x / div >= 10) {
    div = div * 10;
}

上方部分使div = 10000,

然后这部分使left = 1和right = 1,然后比较left和right

int left = x / div;
int right = x % 10;

然后,当我们遍及此部分

x = (x % div) / 10;
div = div / 100;

发生这种情况

x = (12321%10000)/10 = (2321)/10 = 232

它们使用div取模,以除去第一位,然后除以10以除去最后一位。因为已经比较过第一位和最后一位数字,所以将其删除。 div除以100,是因为我们一次从“ x”中删除了两位数字...第一位和最后一位。

now, x = 232

这部分使left = 2和right = 2,并再次比较left和right

int left = x / div;
int right = x % 10;

然后,当我们遍历此部分

x = (x % div) / 10;
div = div / 100;

发生这种情况

x = (232%100)/10 = (32)/10 = 3

此后,left = 3和right = 3,它们匹配,返回“ true”,循环结束。

答案 1 :(得分:1)

private static boolean isPalindrome(int number) {
    int temp = number;
    int result = 0;
    while (temp != 0) {
        result = result * 10 + temp % 10;
        temp /= 10;
    }
    return number == result;
}