流心
发布于 2024-05-22 / 0 阅读
0

回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

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

  • 例如,121 是回文,而 123 不是。

bool isPalindrome(int x) {
    // 负数和以 0 结尾的正数不是回文数
    if (x < 0 || (x % 10 == 0 && x != 0)) {
        return 0; // false
    }
    int reversed = 0; // 用于存放反转后的整数
    while (x > reversed) {
        reversed = reversed * 10 + x % 10; // 反转最后一位
        x /= 10; // 去掉最后一位
    }

    // 如果长度是偶数,两个部分应该相等
    // 如果长度是奇数,去掉中间位再比较
    return x == reversed || x == reversed / 10;
}
  • 判断负数和特定正数的条件:

    • x < 0:如果 x 是负数,直接返回 false(0)。负数不可能是回文数,因为负号只在左边。

    • x % 10 == 0 && x != 0:如果 x 的最后一位是 0(即 x 可以被 10 整除),并且 x 不是 0,本身也不是回文数。因为回文数的最后一位不能是 0(除了 0 本身)

  • 反转整数:

    • int reversed = 0:初始化一个变量 reversed,用于存放反转后的整数。

    • while (x > reversed):循环条件是 x 大于 reversed,即只需反转到 x 的一半。这个条件确保只需处理一半的数字,以避免整数字的溢出。

    • reversed = reversed * 10 + x % 10:这行代码的作用是取 x 的最后一位(x % 10),并将其添加到 reversed 的末尾。通过将 reversed 乘以 10 来移动其数字位置,为新加的数字留出空间。

    • x /= 10:去掉 x 的最后一位,准备进行下一轮循环。

  • 判断回文:

    • return x == reversed:如果 x 是偶数位数的回文,反转后的值 reversed 应与 x 相等。

    • x == reversed / 10:如果 x 是奇数位数的回文,反转后中间的那一位可以忽略。通过 reversed / 10 来去掉中间的那一位(在反转过程中总是会多出一位),然后比较剩下的部分。