Skip to content

Latest commit

 

History

History

866.Prime-Palindrome

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

866.Prime-Palindrome

我们有两种思路,一种是搜寻所有大于N的质数,然后查看它们是否是回文数。另一种方案是反过来,搜寻所有大于N的回文数,然后查看它们是否是质数。显然后者更高效,因为我们只需要确定回文数的前缀,就能通过翻转构造出完整的回文数。考虑到答案的上限是2e8(也就是9位数字),说明我们可以直接遍历大约1e4种回文数(即确定回文数的前五个数字),时间复杂度是可以接受的。

有一个需要注意的,假设我们确定了回文数的前半部分xyz,理论上我们可以构造出两种回文数:xyzzyx和xyzyx。但前者肯定不是质数,因为能被11整除。所以对于任意的前缀,我们只需要构造奇数位的回文数即可。因此搜索的时间复杂度可以进一步减半。

因为答案上限是2e8,所以我们遍历的前缀可以从1(对应的回文数是1)到20000(对应的回文数是200000002)。或者我们可以将下限设置的更精确些。如果N的位数是n,那么我们可以从前缀为pow(10,n/2)开始搜索。

但是有一个corner case,那么就是当N==11的时候,不能通过上面的步骤得到正确的答案。这是因为11虽然有偶数位,根据上面的分析可知它能被11整除,但恰好它本身就是质数。

Leetcode Link