列表

详情


479. 最大回文数乘积

给定一个整数 n ,返回 可表示为两个 n 位整数乘积的 最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余

 

示例 1:

输入:n = 2
输出:987
解释:99 x 91 = 9009, 9009 % 1337 = 987

示例 2:

输入: n = 1
输出: 9

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int largestPalindrome(int n) { } };

java 解法, 执行用时: 102 ms, 内存消耗: 38 MB, 提交时间: 2023-01-11 16:51:47

class Solution {
    public int largestPalindrome(int n) {
        if (n == 1) {
            return 9;
        }
        int upper = (int) Math.pow(10, n) - 1;
        int ans = 0;
        for (int left = upper; ans == 0; --left) { // 枚举回文数的左半部分
            long p = left;
            for (int x = left; x > 0; x /= 10) {
                p = p * 10 + x % 10; // 翻转左半部分到其自身末尾,构造回文数 p
            }
            for (long x = upper; x * x >= p; --x) {
                if (p % x == 0) { // x 是 p 的因子
                    ans = (int) (p % 1337);
                    break;
                }
            }
        }
        return ans;
    }
}

javascript 解法, 执行用时: 6384 ms, 内存消耗: 47.4 MB, 提交时间: 2023-01-11 16:51:07

/**
 * @param {number} n
 * @return {number}
 */
var largestPalindrome = function(n) {
    if (n === 1) {
        return 9;
    }
    const upper = 10 ** n - 1;
    for (let left = upper; left > upper / 10; left--) {
        let right = String(left).split('').reverse().join('');
        let p = BigInt(String(left) + right)    //得到回文数
        let x = BigInt(upper);
        while (x * x >= p) {
            if (p % x === BigInt(0)) { // x 是 p 的因子
                return p % BigInt(1337);
            }
            x--;
        }
    }
};

golang 解法, 执行用时: 88 ms, 内存消耗: 1.9 MB, 提交时间: 2023-01-11 16:50:50

func largestPalindrome(n int) int {
    if n == 1 {
        return 9
    }
    upper := int(math.Pow10(n)) - 1
    for left := upper; ; left-- { // 枚举回文数的左半部分
        p := left
        for x := left; x > 0; x /= 10 {
            p = p*10 + x%10 // 翻转左半部分到其自身末尾,构造回文数 p
        }
        for x := upper; x*x >= p; x-- {
            if p%x == 0 { // x 是 p 的因子
                return p % 1337
            }
        }
    }
}

python3 解法, 执行用时: 3192 ms, 内存消耗: 14.8 MB, 提交时间: 2023-01-11 16:50:33

class Solution:
    def largestPalindrome(self, n: int) -> int:
        if n == 1:
            return 9
        upper = 10 ** n - 1
        for left in range(upper, upper // 10, -1):  # 枚举回文数的左半部分
            p, x = left, left
            while x:
                p = p * 10 + x % 10  # 翻转左半部分到其自身末尾,构造回文数 p
                x //= 10
            x = upper
            while x * x >= p:
                if p % x == 0:  # x 是 p 的因子
                    return p % 1337
                x -= 1

上一题