你需要找到由两个 n 位数的乘积组成的最大回文数。
由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。
示例:
输入: 2
输出: 987
解释: 99 x 91 = 9009, 9009 % 1337 = 987
说明:
n 的取值范围为 [1,8]。
方法一:打表哈哈哈,n只有8,一个一个试出来就行。
class Solution {
public int largestPalindrome(int n) {
if(n==1) return 9;
if(n==2) return 987;
if(n==3) return 123;
if(n==4) return 597;
if(n==5) return 677;
if(n==6) return 1218;
if(n==7) return 877;
if(n==8) return 475;
return 0;
}
}
方法二:假正规做法
我们可以枚举回文数,为了使回文数尽可能的大,我们应该从大到小来构造,然后去找每一个符合条件的因数即可。
class Solution {
public int largestPalindrome(int n) {
if(n==1) return 9;
long max=(long)Math.pow(10, n)-1;
for(long i=max-1;i>max/10;i--) {
String s=String.valueOf(i);
long rev=Long.parseLong(s+new StringBuilder(s).reverse().toString());
for(long x=max;x*x>=rev;x--)
if(rev%x==0)
return (int)(rev%1337);
}
return 0;
}
}