【LeetCode 简单题】111-最大回文数乘积

声明:

今天是第111道题。找到由两个 n 位数的乘积组成的最大回文数。由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

题目:你需要找到由两个 n 位数的乘积组成的最大回文数。由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。

示例:

输入: 2

输出: 987

解释: 99 x 91 = 9009, 9009 % 1337 = 987

说明:

n 的取值范围为 [1,8]。

解法1。该做法借鉴了很多博客的思路,在单机ipython下验证过了,但提交总是超时,代码如下。

class Solution(object):
    def largestPalindrome(self, n):
        """
        :type n: int
        :rtype: int
        """
        upper = pow(10,n)-1
        lower = pow(10,n-1)
        for i in range(upper,lower-1,-1):
            palin = int(str(i)+str(i)[::-1])
            for j in range(upper,int(math.sqrt(palin)),-1):
                if(palin/j > upper):
                    break    # 因为palin太大了,j再往下遍历也找不到符合条件的,所以break出这个循环
                if(palin%j == 0):
                    return palin%1337
        return -1

解法2。就是把输入为[1,8]的所有情况列举出来,没啥好说的,代码如下。

执行用时: 24 ms, 在Largest Palindrome Product的Python提交中击败了96.67% 的用户

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

结尾

解法1:https://blog.csdn.net/hy971216/article/details/81395603

解法2:LeetCode

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/84379391