479.largest-palindrome-product.java 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. class Solution {
  2. private static final int MOD = 1337;
  3. public int largestPalindrome(int n) {
  4. if (n == 1) return 9;
  5. int upper = (int) Math.pow(10, n) - 1;
  6. int lower = upper / 10;
  7. for (int i = upper; lower < i; i--) {
  8. long p = toPalindrome(i, n);
  9. int sqrt = (int) Math.sqrt(p);
  10. for (int j = upper; sqrt <= j; j--) {
  11. if (p % j != 0L) continue;
  12. int ratio = (int) (p / j);
  13. if (lower < ratio && ratio <= upper)
  14. return (int) (p % MOD);
  15. }
  16. }
  17. return -1;
  18. }
  19. private long toPalindrome(int num, int n) {
  20. int[] digits = new int[2 * n];
  21. for (int hi = n, lo = n - 1; 0 <= lo; hi++, lo--) {
  22. int digit = num % 10;
  23. digits[hi] = digit;
  24. digits[lo] = digit;
  25. num /= 10;
  26. }
  27. long p = 0L, base = 1L;
  28. for (int i = 0; i < 2 * n; i++) {
  29. p += digits[i] * base;
  30. base *= 10L;
  31. }
  32. return p;
  33. }
  34. }