Smallest Common Multiple

題目要求

找出能被兩個給定參數和它們之間的連續數字整除的最小公倍數。

範圍是兩個數字構成的數組,兩個數字不一定按數字順序排序。

例如對 1 和 3 —— 找出能被 1 和 3 和它們之間所有數字整除的最小公倍數。

參考資料:最小公倍數


解析

最小公倍數的判斷方法

1、如果題目只是給了兩個較小的數字(如1,2),求最小公倍數,無疑使用數組存儲找到相同數字最爲便捷,但是題目給出的數值範圍較大,此方法不合適
2、通過a*b/(a和b的最大公約數)也可以得到a和b的最小公倍數,在通過循環將a和b的最小公倍數與數組中下一位數字c比較下去,即可得到數組數值範圍內的最小公倍數


解題思路

第一步:將兩個給定參數按從大到小的順序排列(從小到大也行,跟後面的操作相關)並將其中未在數組中顯示的數據存入一個新數組

第二步:將新數組中的每個元素通過reduce完成遍歷,返回新數組中的最小公倍數

第三步:編寫一個函數完成對兩個參數求最大公約數

第四步:將大象放進去,關上門

Javascript代碼


function smallestCommons(arr) {
  arr.sort(function(a,b){return a-b;});
  var arrs = [];
  for(var i = arr[0];i <= arr[1];i++){
    arrs.push(i);
  }

  var gcd = function(a,b){
    if(a%b===0)
      return b;
    else 
      return gcd(b,a%b);
  };

  return arrs.reduce(function(a,b){
    return a*b/gcd(a,b);
  });

}


smallestCommons([1,5]);

結語

感覺算法題目總是和數學有着不可分割的關係,寫寫算法,感覺自己數學都變好了=。=

簡潔的算法都是建立在數學公式的簡潔之上的,數學好真的挺重要的2333


發佈了25 篇原創文章 · 獲贊 96 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章