簡體   English   中英

沒有停止條件的for循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM