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


479. Largest Palindrome Product

题目连接python

479.1 题目描述:

Find the largest palindrome made from the product of two n-digit numbers.git

Since the result could be very large, you should return the largest palindrome mod 1337.web

Example:svg

Input: 2函数

Output: 987ui

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

Note:code

The range of n is [1,8].xml

479.2 解题思路:

  1. 思路一:分为两步,一步是创建一个回文整数,一个是判断这个回文整数能够由两个n位数相乘获得。
    1. 创建回文整数:利用to_string函数,将整数n转换为string获得S1,而后翻转string获得S2,最后利用stol函数,将string(S1+S2)转换为long型。
    2. 判断该回文数是否能够由两个n位数相乘获得:从10的n次方-1开始遍历,到10的n-1次方结束,依次获取回文整数。而后从10的n次方-1开始判断,而且其平方要大于这个回文整数。而后判断是否整除,而且整除后的除数是否小于10的n次方-1。不然条件,就返回这个回文数对1337取余。

479.3 C++代码:

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

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代码:

一、思路一代码(超时)

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