题目
回文数就是从前往后和从后往前读都一样的数。由两个 2 位数相乘得到的最大回文乘积是 9009 = 91 × 99。找出由两个 n 位数相乘得到的最大回文乘积。
测试用例:
largestPalindromeProduct(2)应该返回 9009
largestPalindromeProduct(3)应该返回 906609。
代码
function largestPalindromeProduct(digit) {
let min, max, i = 0, palindromeArr = [], largest = 0;
//找出最小的digit位数min和最大的digit位数max
while (i < digit) {
if (i == 0) {
min = 1;
max = 9;
} else {
min *= 10;
max = max * 10 + 9;
}
i++;
}
//由大到小,找出max->min里所有回文乘积
for (let j = max; j >= min; j--) {
for (let k = max; k >= min; k--) {
if (isPalindrome(j * k)) {
palindromeArr.push(j * k)
}
}
}
//找出palindromeArr里最大的数
return findLargest(palindromeArr);
}
//工具函数:判断数字n是否为回文数字
function isPalindrome(n) {
let str = String(n);
let str1 = str.split('').reverse().join('')
if (str == str1)
return str == str1;
}
//工具函数:找出数组arr中里的最大数largest
function findLargest(arr) {
let largest = 0;
for (i of arr) {
if (i > largest) {
largest = i;
}
}
return largest;
}
largestPalindromeProduct(3)//906609