113、最大回文数乘积

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

排名靠前的都是将八个测试用例都写进去的玩意,真是鸡贼啊,哈哈哈~~~

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/85098241