1. 程式人生 > >【LeetCode 簡單題】111-最大回文數乘積

【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