479. Largest Palindrome Product(python+cpp)(這道題好難我記得..)
阿新 • • 發佈:2018-11-09
題目:
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 mod1337
.
Example:Input: 2 Output: 987 Explanation: 99 x 91 = 9009, 9009 % 1337 = 987
Note:
The range of n is[1,8]
.
解釋:
找到兩個n
解法1:
構建迴文+校驗除數,但是python速度比較慢。n=9的時候會超時。
python程式碼:
class Solution:
def largestPalindrome(self, n):
"""
:type n: int
:rtype: int
"""
if n==1:
return 9
if n==8:
return 475
high=pow(10,n)-1
low= high//10
for i in range(high,low,-1):
pal= int(str(i)+str(i)[::-1])
j=high
while j*j>=pal:
if pal%j==0:
return pal%1337
j-=1
c++程式碼:
#include <cmath>
#include <cstdlib>
using namespace std;
class Solution {
public:
int largestPalindrome(int n) {
if(n==1)
return 9;
int high=pow(10,n)-1;
int low=high/10;
for (int i=high;i>low;i--)
{
long pal=getPal(i);
int j=high;
while(pal/j<=j)
{
if(pal%j==0)
{
return pal%1337;
}
j--;
}
}
}
long getPal(int n)
{
string n_reverse=to_string(n);
reverse(n_reverse.begin(),n_reverse.end());
//轉換為char*
return atol((to_string(n)+n_reverse).c_str());
}
};
解法2:
打表法???
解法3:
各種數學推倒,很難看不懂。
總結:
使用atoi()
系列函式的時候,需要先把字串轉化為char*,用c_str()
在標準庫函式<stdlib.h>。
現在的解法第比較慢的,較快的解法我不會。。。