今天这题比较简单,一行代码就解决了,思路其实简单,就是判断下当前数的奇偶性,如果是偶数,那么最小公倍数肯定就是数本身;如果是奇数,那么就是两个数的乘积。
当然,还有一个更通俗的做法,就是根据 "最大公约数和最小公倍数的乘积等于两数乘积" 的关系进行求解,通过欧几里得方法求出最大公约数,最小公倍数也就求出来了,但是,针对这个题这就显得有点麻烦了,知道就好。下面是具体实现:
//1. 通过判断奇偶性求解
class Solution {
public:
int smallestEvenMultiple(int n) {
return ((n & 1) == 0) ? n : n * 2;
}
};
//2. 通过最大公约数,最小公倍数关系求解
class Solution {
public:
int gcd(int a, int b) { // 求最大公约数
if (a < b) swap(a, b); // 保证a大于等于b
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return a;
}
int lcm(int a, int b) { // 求最小公倍数
return a * b / gcd(a, b);
}
int smallestEvenMultiple(int n) {
return lcm(2, n);
}
};