FreeCodeCamp(JavaScript)项目Euler 4

时间:2018-07-26 09:57:57

标签: javascript palindrome

我当前正在尝试在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);

1 个答案:

答案 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;
}

如果您想进一步改善代码,建议您反转循环并返回遇到的第一个回文,这样可以提高方法的速度。