1. 程式人生 > >479. Largest Palindrome Product(python+cpp)(這道題好難我記得..)

479. Largest Palindrome Product(python+cpp)(這道題好難我記得..)

題目:

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].

解釋:
找到兩個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>。
現在的解法第比較慢的,較快的解法我不會。。。