您的位置:首页 > 编程语言 > C语言/C++

【leetcode】479. Largest Palindrome Product(Python & C++)

2017-09-27 19:59 302 查看

479. Largest Palindrome Product

题目链接

479.1 题目描述:

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.

Example:

Input: 2

Output: 987

Explanation: 99 x 91 = 9009, 9009 % 1337 = 987

Note:

The range of n is [1,8].

479.2 解题思路:

思路一:分为两步,一步是建立一个回文整数,一个是判断这个回文整数可以由两个n位数相乘得到。

建立回文整数:利用to_string函数,将整数n转换为string得到S1,然后翻转string得到S2,最后利用stol函数,将string(S1+S2)转换为long型。

判断该回文数是否可以由两个n位数相乘得到:从10的n次方-1开始遍历,到10的n-1次方结束,依次获取回文整数。然后从10的n次方-1开始判断,并且其平方要大于这个回文整数。然后判断是否整除,并且整除后的除数是否小于10的n次方-1。否则条件,就返回这个回文数对1337取余。

479.3 C++代码:

1、思路一代码(402ms):

class Solution135 {
public:
long buildPalindrome(int n)
{
string s = to_string(n);
reverse(s.begin(), s.end());
return stol(to_string(n) + s);
}
int largestPalindrome(int n) {
if (n == 1)
return 9;
int max = pow(10, n) - 1;
int min = pow(10, n - 1);
for (int i = max; i >= min;i--)
{
long mix = buildPalindrome(i);
for (long j = max; j*j >= mix;j--)
{
if (mix%j == 0 && mix / j <= max)
return mix % 1337;
}
}
return -1;
}
};


479.4 Python代码:

1、思路一代码(超时)

class Solution(object):#time limited
def largestPalindrome(self, n):
"""
:type n: int
:rtype: int
"""
if n==1:
return 9
max=10**n-1
min=10**(n-1)
def buildPalindrome(x):
s=str(x)[::-1]
a=long(str(x)+s)
return a
i=max
while i>=min:
mix=buildPalindrome(i)
j=max
while j*j>=mix:
if mix%j==0 and mix/j<=max:
return mix%1337
j-=1
i-=1
return -1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: