当前位置: 面试刷题>> 回文数(经典算法150题)


题目描述

题目:判断一个整数是否是回文数

编写一个函数,判断给定的整数是否是回文数。回文数是指正读和反读都相同的数。例如,121是一个回文数,而123则不是。

注意:

  1. 你不能只是将整数转换为字符串来解决这个问题。
  2. 输入的整数是一个32位有符号整数,其范围在 [-2^31, 2^31 - 1] 内。

示例

  • 输入: 121

  • 输出: true

  • 输入: -121

  • 输出: false 解释:因为负数不包括在回文数的范围内(这里假设题目要求的是非负整数,因为题目没有明确说明,但常见解释如此)。

  • 输入: 10

  • 输出: false

PHP 示例代码

function isPalindrome($x) {
    // 处理负数和非整数情况
    if ($x < 0 || (int)$x != $x) {
        return false;
    }

    $reversed = 0;
    $original = $x;

    while ($x > 0) {
        $pop = $x % 10;
        $x = (int)($x / 10);
        $reversed = $reversed * 10 + $pop;
    }

    return $original == $reversed;
}

// 测试示例
echo isPalindrome(121) ? "true" : "false"; // 输出 true
echo "\n";
echo isPalindrome(-121) ? "true" : "false"; // 输出 false
echo "\n";
echo isPalindrome(10) ? "true" : "false"; // 输出 false

Python 示例代码

def isPalindrome(x):
    # 处理负数和非整数情况
    if x < 0 or (x % 1 != 0):
        return False

    reversed_x = 0
    original_x = x

    while x > 0:
        pop = x % 10
        x = x // 10
        reversed_x = reversed_x * 10 + pop

    return original_x == reversed_x

# 测试示例
print(isPalindrome(121)) # 输出 True
print(isPalindrome(-121)) # 输出 False
print(isPalindrome(10)) # 输出 False

JavaScript 示例代码

function isPalindrome(x) {
    // 处理负数和非整数情况
    if (x < 0 || x % 1 !== 0) {
        return false;
    }

    let reversed = 0;
    let original = x;

    while (x > 0) {
        let pop = x % 10;
        x = Math.floor(x / 10);
        reversed = reversed * 10 + pop;
    }

    return original === reversed;
}

// 测试示例
console.log(isPalindrome(121)); // 输出 true
console.log(isPalindrome(-121)); // 输出 false
console.log(isPalindrome(10)); // 输出 false

以上代码示例均遵循了题目要求,未使用字符串操作来判断回文数,而是通过反转数字的一半来进行比较。

推荐面试题