LeetCode479
题目
你需要找到由两个 n 位数的乘积组成的最大回文数。
由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。
示例:
输入: 2
输出: 987
解释: 99 x 91 = 9009, 9009 % 1337 = 987
说明:
n 的取值范围为 [1,8]。
代码
自己超时的写法…到第四种就超时了…
不太明确该怎么优化, 看到评论区说情况就八种,打表就好了…打表?..就好了?..
class Solution {
public int largestPalindrome(int n) {
//我真的好喜欢她啊
int[] temp = new int[16];
long min = (int) Math.pow(10,n-1);
long max = (int) Math.pow(10,n);
long a = min;
long b = min;
long x;
long bigger = 0;
boolean flag = true;
for ( ; a < max; a++){
for(b = min ; b < max; b++){
flag = true;
x = a * b;
long tempX = x;
int i = 0;
while (x != 0){
temp[i] = (int) (x % 10);
x = x / 10;
i++;
}
for(int j = 0; j < i / 2; j++){
if (temp[j] != temp[i-1-j]){
flag = false;
}
}
if(flag){
if(tempX > bigger){
bigger = tempX;
}
}
}
}
int ans = (int) (bigger % 1337l);
return ans;
}
}
是大佬的写法Orz
其实是很取巧的…你可以一个一个去碰答案…
面向测试用例编程(X
class Solution {
public int largestPalindrome(int n) {
switch (n) {
case 1: return 9;
case 2: return 987;
case 3: return 123;
case 4: return 597;
case 5: return 677;
case 6: return 1218;
case 7: return 877;
case 8: return 475;
default: throw new IllegalArgumentException();
}
}
}