LeetCode 479 最大回文数乘积[暴力 枚举] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 479 最大回文数乘积[暴力 枚举] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
n的范围为1~8,相信大伙已经知道答案了,代码如下:
class Solution
public:
int largestPalindrome(int n)
vector<int> ans = 9,987,123,597,677,1218,877,475;
return ans[n-1];
;
好了,不开玩笑了,这道题据说刚上传时是easy题,但是具有一定的难度,结果又给调成了困难题,着实给我带来了不少困惑,还以为用特别复杂的知识去解决,其实解决方法无非是枚举。首先确定左半部分阈值,因为两个n位数乘积最大获得2n位数,所以以n位数为每个半部分,从大到小遍历(能保证是最大的回文),把获取的回文进行判断,判断是否是两个n位数整数的乘积,是直接返回回文余1337,代码如下:
class Solution
public:
int largestPalindrome(int n)
if(n == 1) return 9;
// 获取回文左半部分阈值
int threshold = pow(10, n) - 1;
// 枚举回文左半部分
for(int left = threshold; ; left --)
long p = left;
// 合并整个回文
for(int rest = left; rest > 0; rest /= 10)
p = p * 10 + rest % 10;
// 判断是否是两个整数的乘积
for(long num = threshold; num * num >= p; num --)
if(p % num == 0)
return p % 1337;
return 1;
;
以上是关于LeetCode 479 最大回文数乘积[暴力 枚举] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
479 Largest Palindrome Product 最大回文数乘积