javascript - 没有停止条件的for循环?
问题描述
我刚刚完成了 FreecodeCamp.com 测验中间算法脚本:最小公倍数。
代码对于他们给出的测试用例(和)运行良好[1, 5]
,但如果我使用更大的范围,我还必须编辑代码并增加-loop 的停止条件,当我从循环中删除停止条件时,它给出了一个错误。[5, 1]
[23, 18]
[1, 13]
for
function smallestCommons(arr) {
arr.sort((a, b) => a - b);
const creatArray = (start, stop, step) =>
Array.from(
{ length: (stop - start) / step + 1 },
(_, i) => start + i * step
);
let myArray = creatArray(arr[0], arr[arr.length - 1], 1);
for (let i = myArray[myArray.length - 1]; i < 10000000; i++) {
if (myArray.every((e) => calback(e, i))) {
return i;
}
}
}
let calback = (elem, e) => e % elem === 0;
console.log(smallestCommons([1, 5]));
这段代码有什么简单的修复吗?我的解决方案是有效的还是有更好的方法来解决这个问题?
谢谢
解决方案
将解释一些代码;我们首先要做的是对数组进行排序,因为它是一个由两个数字组成的数组,在我们对它进行排序之后,我们需要创建一个新数组来存储从第一个元素到第二个元素的路径;我们定义最大和最小数字之间的差,以便在我们存储路径后创建一个存储路径;我们定义了两个函数来求大公约数和最小公倍数;之后我们使用 reduce 来获得 LCM 的 Value。希望这对你有帮助,gcd的算法是基于欧几里得划分
function smallestCommons(arr) {
arr = arr.sort((a,b)=>a-b)
let newarr = []
let dif = arr[1]-arr[0]
for(let i=0; i<= dif;i++){
newarr.push(arr[0]+i)
}
const gcd = (a,b)=>a?gcd(b%a,a):b;
const lcm = (a,b)=> a/gcd(a,b)*b
return newarr.reduce(lcm);
}
console.log(smallestCommons([1, 5]));
console.log(smallestCommons([90,10]));
推荐阅读
- vim - 如何在 vim 中调用 :CtrlSF 搜索键
- php - 在php中将变量传递给strtotime
- java - 使用 DefaultListCellRenderer 将图标渲染到 JList 的右侧
- javascript - 当呈现的数据很多时,ScrollTop 不会滚动到底部 - Jquery
- python - Python 中使用 Pandas.series.str.contains 进行字符串替换的模式匹配错误
- ios - 如何在不连接插座的情况下将情节提要的按钮颜色设置为常用颜色
- c# - 可扩展的所有者界面
- apache-spark - 在 Spark Structured Streaming 中使用 collect_list 时出错
- c - 带有 if 条件的未使用变量
- mysql - 来自 MySQL 的 UITabbar 徽章值