[LeetCode]Largest Palindrome Product

题目描述:

LeetCode 479. Largest Palindrome Product

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位数字的乘积组成的最大回文数。

由于结果可能会很大,因此将结果对1337取模。

解题思路:

解法I 构造回文+校验除数

输入范围n∈[1, 8],除n = 1以外,其余n值最大回文数palindrome的位数均为偶数,可以拆分为half与reversed(half)左右两半

从上界high = pow(10, n) - 1向下界low = pow(10, n - 1)枚举half,构造回文,检查是否存在两个n位数的除数

Java代码:

public class Solution {
    public int largestPalindrome(int n) {
        if (n == 1) {
            return 9;
        }

        int high = (int) Math.pow(10, n) - 1, low = high / 10;

        for (int i = high; i > low; i--) {
            long palindrome = createPalindrome(i);

            for (long j = high; j > low; j--) {
                if (palindrome / j > high) {
                    break;
                }
                if (palindrome % j == 0) {
                    return (int) (palindrome % 1337);
                }
            }
        }
        return -1;
    }

    private long createPalindrome(long num) {
        String str = num + new StringBuilder(Long.toString(num)).reverse().toString();
        return Long.parseLong(str);
    }
}

解法II 打表法

Python代码:

class Solution(object):
    def largestPalindrome(self, n):
        """
        :type n: int
        :rtype: int
        """
        return [9, 9009, 906609, 99000099, 9966006699, 999000000999, \
                    99956644665999, 9999000000009999][n - 1] % 1337

 

本文链接:http://bookshadow.com/weblog/2017/01/05/leetcode-largest-palindrome-product/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

评论
  1. jj jj 发布于 2017年1月6日 14:00 #

    How can we proof the assumption: "除n = 1以外,其余回文数palindrome的位数均为偶数"

  2. 在线疯狂 在线疯狂 发布于 2017年1月6日 20:15 #

    这句话有误,应为“其余n值最大回文数palindrome的位数均为偶数”,是n∈[2,8]的实际运行的结果,没有严格的数学证明。。。

张贴您的评论