113、最大回文數乘積
阿新 • • 發佈:2018-12-23
你需要找到由兩個 n 位數的乘積組成的最大回文數。
由於結果會很大,你只需返回最大回文數 mod 1337得到的結果。
示例:
輸入: 2
輸出: 987
解釋: 99 x 91 = 9009, 9009 % 1337 = 987
說明:
n 的取值範圍為 [1,8]。
程式碼
這道題很明顯如果通過暴力求解會超時,只有進一步的進行迴圈判斷才能達到要求
但是一般使用的是long型別,如果將底下的x換成int型那麼會出錯
一個long型別除以int型會將int型向上轉
class Solution { public static int largestPalindrome(int n) { if (n == 1) { return 9; }else { int upper = (int) Math.pow(10, n)-1; int lower = upper / 10; for(int i = upper; i > lower; i--){ long is = re(i); for (**long x = upper;** x * x >= is; x--) {//如果將x型別換成int會出錯 if(is % x == 0){ return (int) (is % 1337); } } } return 0; } } public static long re(int i){ StringBuffer s=new StringBuffer(); s.append(Integer.toString(i)).reverse(); return Long.parseLong(i+s.toString()); } }
public static int largestPalindrome(int n) { if(n==1) return 9; int maxNumber=(int)Math.pow(10,n)-1; for(int i=maxNumber;i>maxNumber/10;i--){//從大到小遍歷n位數 long num=palindrome(i);//構造迴文 for(long j=maxNumber;j*j>=num;j--){//判斷num是否可以分解為兩個n位數相乘 if(num%j==0) return (int)(num%1337); } } return 0; } public long palindrome(int i){ StringBuffer s=new StringBuffer(); s.append(Integer.toString(i)).reverse(); return Long.parseLong(i+s.toString()); }
排名靠前的都是將八個測試用例都寫進去的玩意,真是雞賊啊,哈哈哈~~~