Números palindrómicos - LeetCode

 

código: 

Escrito por mí mismo:

//自己写的,数字完全反转然后和原数字比较,这个有一个问题就是可能Int的反转值会是Long导致整数溢出
fun isPalindrome(x: Int): Boolean {
    if (x < 0) return false
    var reverse = 0
    var temp = x
    while (temp != 0) {
        reverse *= 10        // 注意这个顺序,要在循环语句的第一条,因为初始值是0,放在循环语句的第一条等于第一次没有*10
        // 本来逻辑也是先获取最后一位数字,然后原数据/10,判断是否除完后=0,如果=0退出循环,否则拿反转的数字 * 10 + 再次获取原数据的最后一位,然后原数据/10,循环起来
        reverse += temp % 10 // 如果reverse *= 10 放在了后面,会出现反转结果多*10,因为没有利用到初始值0 * 10 规避第一次
        temp /= 10
    }
    return x == reverse
}

Solución oficial:

//看解题,数字反转一半和剩下的一半比较,如何判断反转了一半呢?就是不断比较反转的数值 和 原数值 / 10后的数值,
// 如果出现==说明是回文,如果出现反转的数值 > 原数值 / 10 说明不是回文
fun isPalindrome(x: Int): Boolean {
    // 特殊情况:
    // 如上所述,当 x < 0 时,x 不是回文数。
    // 同样地,如果数字的最后一位是 0,为了使该数字为回文,
    // 则其第一位数字也应该是 0
    // 只有 0 满足这一属性
    if (x < 0 || (x % 10 == 0 && x != 0)) {
        return false
    }

    var revertedNumber = 0
    var temp = x

    while (temp > revertedNumber) {
        revertedNumber = revertedNumber * 10 + temp % 10
        temp /= 10
    }

    // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
    // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
    // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
    return temp == revertedNumber || temp == revertedNumber / 10
}

Supongo que te gusta

Origin blog.csdn.net/m0_37707561/article/details/128452728
Recomendado
Clasificación