Find the largest palindrome made from the product of two n-digit numbers.
Since the result could be very large, you should return the largest palindrome mod 1337.
Example:
Input: 2
Output: 987
Explanation: 99 x 91 = 9009, 9009 % 1337 = 987
Note:
The range of n is [1,8].
-----------------------又恶心!
Solution#1, 找出上下边界,做遍历。超时
Solution#2 在上下边界内遍历所有的palindrome,找出符合的
class Solution { public int largestPalindrome(int n) { if (n == 1) return 9; long upper = (long)Math.pow(10, n) - 1; long lower = (long)Math.pow(10, n - 1); long max = (long)upper * (long)upper; long firstHalf = max / (long)Math.pow(10, n); boolean found = false; long pal = 0; while (!found) { pal = createPal(firstHalf); for (long i = upper; i >= lower; i--) { if (pal > i * i) break; if (pal % i == 0) { found = true; break; } } firstHalf--; } return (int)(pal % 1337); } private long createPal(long firstHalf) { String s = firstHalf + new StringBuilder().append(firstHalf).reverse().toString(); return Long.parseLong(s); } }
No comments:
Post a Comment