我当前正在尝试在Codecamp中找到针对Euler问题4的解决方案。该解决方案使用2位数字,但对于3,则给出的结果不是正确的结果90909作为答案。由于我还不熟悉JS,因此无法找到问题。提前谢谢!
function largestPalindromeProduct(digit) {
var result;
var a;
var b;
if(digit == 2){
a = 99;
b = 99;
}else{
a = 999;
b = 999;
}
for(var i = 1; i <= a; i++){
for(var y = 1; y <= b ; y++){
var calc = i*y;
var calcString = calc.toString();
var calcStringReverse = calcString.split('').reverse().join('');
if(calcString == calcStringReverse){
result = calc;
}
}
}
return result;
}
largestPalindromeProduct(3);
答案 0 :(得分:0)
在解决方案中,如果发现了回文,您将遍历所有值并更新result
变量,但,您永远不会检查新回文是否大于当前选择的回文。导致最后找到的回文总是返回(90909)。
这是更正的代码:
function largestPalindromeProduct(digit) {
// We'll initialize "result" with a value, as we'll be using it later on
var result = 0;
var a;
var b;
if (digit == 2) {
a = 99;
b = 99;
} else {
a = 999;
b = 999;
}
for (var i = 1; i <= a; i++) {
for (var y = 1; y <= b ; y++) {
var calc = i * y;
var calcString = calc.toString();
var calcStringReverse = calcString.split('').reverse().join('');
// This is the fundamental change necessary to get it working as intended
if (calcString === calcStringReverse && calc > result) {
result = calc;
}
}
}
return result;
}
如果您想进一步改善代码,建议您反转循环并返回遇到的第一个回文,这样可以提高方法的速度。