Brute force 解法,穷举可能的回文数乘积candidate,对每个可能的成绩判断能否由 N 位数相乘获得。时间复杂度最坏情况为 O(10^2n), O(10^n) for generate all candidate products, O(10^n) for validation for each product candidate.
C++ Code:
typedeflonglong ll;classSolution{// 检验从最小n位数_min开始,到最大的_max为止,看能否乘出prodboolisValid(int_min,int_max,llprod,llmaxProd){if(prod > maxProd)returnfalse;for(int i = _max; i >=sqrt(prod);--i){if(prod % i ==0&& prod / i <= _max && prod / i >= _min){returntrue;}}returnfalse;}// 生成回文数,例如 input=123, output=123 321llgeneratePalindrome(intnum){ ll t = num, ret = num;while(t >0){ ret = ret *10+ t %10; t /=10;}return ret;}public:intlargestPalindrome(intn){if(n ==1)return9;int _min =pow(10, n -1);int _max =pow(10, n)-1; ll maxProd =(ll)_max *(ll)_max;for(int i = _max; i >=1;--i){ ll prod =generatePalindrome(i);if(isValid(_min, _max, prod, maxProd)){return prod %1337;}}return0;}};