📅  最后修改于: 2023-12-03 15:29:11.833000             🧑  作者: Mango
编写一个函数,接收三个非零数字作为输入参数,返回这三个数字的最小公倍数(LCM),同时这个最小公倍数必须是3的倍数。如果不存在这样的最小公倍数,则返回-1。
function getLCM(n1, n2, n3) {
//将三个数字按照从大到小的顺序排列
if (n1 < n2) {
swap(n1, n2);
}
if (n1 < n3) {
swap(n1, n3);
}
if (n2 < n3) {
swap(n2, n3);
}
//计算出这个数列的最小公倍数LCM
var lcm = n1;
while (lcm % n2 !== 0 || lcm % n3 !== 0) {
lcm += n1;
}
//用LCM % 3来判断是否存在符合条件的最小公倍数,存在则返回LCM,否则返回-1
return lcm % 3 === 0 ? lcm : -1;
}
function swap(a,b){
var temp = a;
a = b;
b = temp;
}
这个方法的时间复杂度为O(LCM),其中LCM指的是三个数的最小公倍数,空间复杂度为O(1)。
测试用例1
console.log(getLCM(3, 7, 9)); //输出 63
测试用例2
console.log(getLCM(4, 5, 6)); //输出 -1
测试用例3
console.log(getLCM(1, 2, 3)); //输出 6
本题实现了找到三个数字的最小公倍数,同时必须是3的倍数的功能,这个思路适用于找出任意三个数字的最小公倍数,而且代码实现非常简单。