【LeetCode 簡單題】111-最大回文數乘積
阿新 • • 發佈:2018-11-27
宣告:
今天是第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