你需要找到由两个 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;
    }
}