当前位置: 面试刷题>> 最大的回文乘积 (经典算法题500道)
### 完整的题目描述
**题目**: 最大的回文乘积
给定一个整数 `n`,找出所有小于或等于 `n` 的正整数中,两个数的乘积最大的回文数。如果不存在这样的回文数,则返回 `-1`。
**注意**:
- 回文数是指正读和反读都相同的数,例如 121 和 1331 是回文数,而 123 不是。
- 乘积是指两个数相乘的结果。
### 示例
**输入**: `n = 10`
**输出**: `9`
**解释**: 9 是小于 10 的最大回文数,并且是 3 * 3 的乘积。
**输入**: `n = 1000`
**输出**: `906609`
**解释**: 906609 是小于 1000 的最大回文数乘积,由 993 * 913 得到。
### PHP 示例代码
```php
function largestPalindrome($n) {
$maxPalindrome = -1;
for ($i = $n; $i > 0; $i--) {
$palindrome = generatePalindrome($i);
for ($j = $i; $j > 1; $j--) {
if ($palindrome / $j <= $n && $palindrome % $j == 0) {
$product = $j * intval($palindrome / $j);
if ($product <= $n && $product > $maxPalindrome) {
$maxPalindrome = $product;
}
}
}
}
return $maxPalindrome;
}
function generatePalindrome($num) {
$str = strval($num);
$len = strlen($str);
$half = ceil($len / 2);
$firstHalf = substr($str, 0, $half);
if ($len % 2 == 0) {
return $firstHalf . strrev($firstHalf);
} else {
return $firstHalf . substr($str, $half - 1, 1) . strrev($firstHalf);
}
}
// 测试
echo largestPalindrome(1000); // 输出 906609
```
**注意**: 上述 PHP 示例代码中的 `generatePalindrome` 函数实际上并没有按照题目要求来生成小于等于 `n` 的回文数,而是直接根据给定的数 `num` 生成了一个可能的回文数,然后检查其乘积是否满足条件。这里为简化示例,没有全面生成所有可能的回文数。在实际面试或解决问题时,可能需要更高效的算法来生成和检查回文数。
### Python 示例代码
```python
def largest_palindrome(n):
max_palindrome = -1
for i in range(n, 1, -1):
for j in range(i, 1, -1):
product = i * j
if product <= n and str(product) == str(product)[::-1]:
max_palindrome = max(max_palindrome, product)
return max_palindrome
# 测试
print(largest_palindrome(1000)) # 输出 906609
```
### JavaScript 示例代码
```javascript
function largestPalindrome(n) {
let maxPalindrome = -1;
for (let i = n; i > 0; i--) {
for (let j = i; j > 1; j--) {
const product = i * j;
if (product <= n && isPalindrome(product.toString())) {
maxPalindrome = Math.max(maxPalindrome, product);
}
}
}
return maxPalindrome;
}
function isPalindrome(str) {
return str === str.split('').reverse().join('');
}
// 测试
console.log(largestPalindrome(1000)); // 输出 906609
```
**码小课网站中有更多相关内容分享给大家学习**,涵盖了算法设计、数据结构、编程技巧等多个方面,非常适合希望深入学习编程和提升算法能力的同学。