Easy
题目描述
给定一个正整数 n,返回既是 2 的倍数又是 n 的倍数的最小正整数。
示例 1:
输入: n = 5
输出: 10
解释: 5 和 2 的最小公倍数是 10。
示例 2:
输入: n = 6
输出: 6
解释: 6 和 2 的最小公倍数是 6。注意一个数是它自身的倍数。
约束条件:
1 <= n <= 150
提示:
- 找到 2 和 n 的倍数的一个保证方法是将它们相乘。什么时候这是答案,什么时候有更小的答案?
- 当 n 是偶数时,有更小的答案。
解题思路
这道题考查的是数学中的最小公倍数(LCM)概念。我们需要找到既是 2 的倍数又是 n 的倍数的最小正整数。
思路分析:
最直接的方法是使用最小公倍数公式:LCM(a,b) = a * b / GCD(a,b),其中 GCD 是最大公约数。
但对于这道特殊题目,我们有更简单的观察:
- 如果 n 是偶数,那么 n 本身就已经是 2 的倍数,所以答案就是 n
- 如果 n 是奇数,那么最小的既是 2 的倍数又是 n 的倍数的数就是 2×n
这是因为:
- 当 n 为偶数时,GCD(2,n) = 2,所以 LCM(2,n) = 2×n/2 = n
- 当 n 为奇数时,GCD(2,n) = 1,所以 LCM(2,n) = 2×n/1 = 2×n
因此,我们只需要判断 n 的奇偶性即可得到答案。
代码实现
class Solution {
public:
int smallestEvenMultiple(int n) {
return n % 2 == 0 ? n : 2 * n;
}
};
class Solution:
def smallestEvenMultiple(self, n: int) -> int:
return n if n % 2 == 0 else 2 * n
public class Solution {
public int SmallestEvenMultiple(int n) {
return n % 2 == 0 ? n : 2 * n;
}
}
var smallestEvenMultiple = function(n) {
return n % 2 === 0 ? n : n * 2;
};
复杂度分析
| 复杂度类型 | 复杂度 | 说明 |
|---|---|---|
| 时间复杂度 | O(1) | 只需要一次取模运算和条件判断 |
| 空间复杂度 | O(1) | 只使用常数空间 |