class Solution {
public:
int largestPalindrome(int n) {
}
};
479. 最大回文数乘积
给定一个整数 n ,返回 可表示为两个 n
位整数乘积的 最大回文整数 。因为答案可能非常大,所以返回它对 1337
取余 。
示例 1:
输入:n = 2 输出:987 解释:99 x 91 = 9009, 9009 % 1337 = 987
示例 2:
输入: n = 1 输出: 9
提示:
1 <= n <= 8
原站题解
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