Find the largest palindrome made from the product of two n-digit numbers.
Since the result could be very large, you should return the largest palindrome mod 1337.
class Solution(object):
def largestPalindrome(self, n):
"""
:type n: int
:rtype: int
"""
if n==1: return 9
for i in range(10**n-1, 10**(n-1)-1, -1):
palin = int(str(i)+str(i)[::-1])
for j in range(10**n-1, 10**(n-1)-1, -1):
if j**2<palin:
break
else:
if palin%j==0:
return palin%1337
1 n=1时,最大乘积是81,不是回文数,两位数的回文数(77,66,55,。。。,11)都无法通过两个一位数的乘积得到,而1到9都是回文数,且都可以通过两个一位数相乘得到,所以返回最大回文数9;
2 n>1时,两个数相乘得到的最大回文数必定是2*n位
3 先建立回文数,再判断这个回文数是否可以由两个n位数相乘得到
4 判断过程:从最大的n位数开始遍历,最大的n位数就是10**n-1,最小的两位数是10**(n-1)
5 遍历的时候,我们用n位数当做回文数的前半段,翻转一下得到后半段,然后再判断能否由两个n位数相乘得到
6 我们遍历的时候还是从最大n位数开始遍历,结束条件是n位数的平方大于回文数
7 palin = int(str(i)+str(i)[::-1])这里要写成str(i)[::-1],不能写成str(i[::-1]),i是integer,需要在转换成str后再reverse
8 if j**2<palin: break 当遍历的数太小后,直接跳出当前循环,因为既然遍历到小数来了,那一定遍历过大数,之前已经验证过了的