[英]for-loop without stop condition?
我剛剛完成了 FreecodeCamp.com 測驗中間算法腳本:最小公倍數。
該代碼對於他們提供的測試用例( [1, 5]
, [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)=>ab) 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]));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.