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時(shí),最大乘積是81,不是回文數(shù),兩位數(shù)的回文數(shù)(77,66,55,。。。,11)都無(wú)法通過(guò)兩個(gè)一位數(shù)的乘積得到,而1到9都是回文數(shù),且都可以通過(guò)兩個(gè)一位數(shù)相乘得到,所以返回最大回文數(shù)9;
2 n>1時(shí),兩個(gè)數(shù)相乘得到的最大回文數(shù)必定是2*n位
3 先建立回文數(shù),再判斷這個(gè)回文數(shù)是否可以由兩個(gè)n位數(shù)相乘得到
4 判斷過(guò)程:從最大的n位數(shù)開(kāi)始遍歷,最大的n位數(shù)就是10**n-1,最小的兩位數(shù)是10**(n-1)
5 遍歷的時(shí)候,我們用n位數(shù)當(dāng)做回文數(shù)的前半段,翻轉(zhuǎn)一下得到后半段,然后再判斷能否由兩個(gè)n位數(shù)相乘得到
6 我們遍歷的時(shí)候還是從最大n位數(shù)開(kāi)始遍歷,結(jié)束條件是n位數(shù)的平方大于回文數(shù)
7?palin = int(str(i)+str(i)[::-1])這里要寫(xiě)成str(i)[::-1],不能寫(xiě)成str(i[::-1]),i是integer,需要在轉(zhuǎn)換成str后再reverse
8? if j**2<palin: break 當(dāng)遍歷的數(shù)太小后,直接跳出當(dāng)前循環(huán),因?yàn)榧热槐闅v到小數(shù)來(lái)了,那一定遍歷過(guò)大數(shù),之前已經(jīng)驗(yàn)證過(guò)了的