我的代码战脚本未通过测试 ..?(系列中最大的 5 位数字)

这里的脚本初学者。我正在尝试代码战(挑战)卡塔。它一直告诉我,我的解决方案不起作用,我想知道为什么。如何修复代码以使其正常工作?以下是问题的内容。


"Complete the solution so that it returns the greatest 

sequence of five consecutive digits found within the number given."


"1234567890" - 67890 is the greatest sequence of 5 consecutive digits.

链接到卡塔:https://www.codewars.com/kata/51675d17e0c1bed195000001/train/javascript


我的代码:


function solution(digits){

  digits = +digits.split('');

  let solution = 0;

  for (let i = 0; i < digits.length; i++) {

    let pending = digits[i] + digits[i+1] + digits[i+2] + digits[i+3] + digits[i+4];

    if (pending > solution) {

      solution = pending;

    }

  }

  return solution;

}

最佳/最解释的答案将获得绿色复选标记。让我知道我的解决方案有点多余也不会有什么坏处 谢谢!


ibeautiful
浏览 71回答 1
1回答

万千封印

你误解了“最伟大的”。您不必添加数字,而是将所有5个连续的数字作为数字。你可以这样写:let pending = digits[i]*10000 + digits[i+1]*1000 + digits[i+2]*100 + digits[i+3]*10 + digits[i+4];事实上,如果你不乘以,12345会给你1 + 2 + 3 + 4 + 5 = 15,但你必须得到12345,而不是15。另外,您必须在结束前5位数字停止循环:for (let i = 0; i < digits.length-4; i++) {另一个错误是您转换为数字的数组:digits = digits.split('').map(x=>+x);您的解决方案如下所示:function solution(digits){&nbsp; digits = digits.split('').map(x=>+x);&nbsp; let solution = 0;&nbsp; for (let i = 0; i < digits.length -4 ; i++) {&nbsp; &nbsp; let pending = digits[i]*10000 + digits[i+1]*1000 + digits[i+2]*100 + digits[i+3]*10 + digits[i+4];&nbsp; &nbsp; if (pending > solution) {&nbsp; &nbsp; &nbsp; solution = pending;&nbsp; &nbsp; }&nbsp; }&nbsp; return solution;}这就是我本来会做的:function solution(digits){&nbsp; return Math.max(...digits.split('').map((x,i,a)=>+(a.slice(i, i+5).join(''))))}你拿“数字”,然后创建一个数组,其中包含所有分隔的数字:digits.split('')使用此数组,对于每个索引 (i),您将 5 个连续数字的序列放入另一个数组中:.map((x,i,a)=>a.slice(i, i+5)您加入以下数字:.join()你把它转换成一个数字:+您最多服用:Math.max(...)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript