479. Largest Palindrome Product(python+cpp)(这道题好难我记得..)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/83855744

题目:

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>。
现在的解法第比较慢的,较快的解法我不会。。。

猜你喜欢

转载自blog.csdn.net/qq_21275321/article/details/83855744