479. 最大回文數乘積
阿新 • • 發佈:2019-01-31
你需要找到由兩個 n 位數的乘積組成的最大回文數。
由於結果會很大,你只需返回最大回文數 mod 1337得到的結果。
示例:
輸入: 2
輸出: 987
解釋: 99 x 91 = 9009, 9009 % 1337 = 987
說明:
n 的取值範圍為 [1,8]。
分析:直接暴力搜尋是要超時的。
先確定n位數的範圍,然後遍歷這個區間的數字。
當n>1時,兩個n位數乘積的最大回文數一定是2n位的。
所以將當前數字的前半段反轉後拼接到後面,組成一個迴文數
class Solution {
public:
int largestPalindrome(int n) {
int upper = pow(10, n) - 1, lower = upper / 10;
for(int i = upper; i > lower; i--) {
string t = to_string(i);
long p = stol(t + string(t.rbegin(), t.rend()));
for(long j = upper; j * j > p; j--) {
if(p % j == 0) {
return p % 1337 ;
}
}
}
return 9;
}
};