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)只使用常数空间

相关题目