题目链接:479. 最大回文数乘积
暴力搜索(这种题目竟然是 hard)。
从最大的可能值开始搜索,两个 $n$ 位数的乘积最多是 $2n$ 位数。
这里假定,这个最大的回文整数必定也是 $2n$ 位数,不知道这个假设对不对,但是在题目给出的值域范围内,这个假设是正确的。
如果在这个范围内没有找到,也就是说以下的代码执行到最后一行的话,需要尝试在 $2n - 1$ 位的回文整数中寻找这个最大值。
import math
class Solution:
def largestPalindrome(self, n: int) -> int:
if n == 1:
return 9
for left in range(10 ** n - 1, 10 ** (n - 1), -1):
val = int(str(left) + str(left)[::-1])
for i in range(10 ** n - 1, math.floor(val ** 0.5), -1):
if val % i == 0 and 10 ** (n - 1) <= val // i < 10 ** n:
return val % 1337
raise ValueError()