
题目描述
给你一个整数 num
,请你返回三个连续的整数,它们的 和 为 num
。如果 num
无法被表示成三个连续整数的和,请你返回一个 空 数组。
示例 1:
输入:num = 33
输出:[10,11,12]
解释:33 可以表示为 10 + 11 + 12 = 33 。
10, 11, 12 是 3 个连续整数,所以返回 [10, 11, 12] 。
示例 2:
输入:num = 4
输出:[]
解释:没有办法将 4 表示成 3 个连续整数的和。
提示:
解法
方法一:数学
我们假设三个连续的整数分别为 \(x-1\), \(x\), \(x+1\),则它们的和为 \(3x\),因此 \(\textit{num}\) 必须是 \(3\) 的倍数。如果 \(\textit{num}\) 不是 \(3\) 的倍数,则无法表示成三个连续整数的和,返回空数组。否则,令 \(x = \frac{\textit{num}}{3}\),则 \(x-1\), \(x\), \(x+1\) 就是三个连续整数,它们的和为 \(\textit{num}\)。
时间复杂度 \(O(1)\),空间复杂度 \(O(1)\)。
| class Solution:
def sumOfThree(self, num: int) -> List[int]:
x, mod = divmod(num, 3)
return [] if mod else [x - 1, x, x + 1]
|
| class Solution {
public long[] sumOfThree(long num) {
if (num % 3 != 0) {
return new long[] {};
}
long x = num / 3;
return new long[] {x - 1, x, x + 1};
}
}
|
| class Solution {
public:
vector<long long> sumOfThree(long long num) {
if (num % 3) {
return {};
}
long long x = num / 3;
return {x - 1, x, x + 1};
}
};
|
| func sumOfThree(num int64) []int64 {
if num%3 != 0 {
return []int64{}
}
x := num / 3
return []int64{x - 1, x, x + 1}
}
|
| function sumOfThree(num: number): number[] {
if (num % 3) {
return [];
}
const x = Math.floor(num / 3);
return [x - 1, x, x + 1];
}
|
| impl Solution {
pub fn sum_of_three(num: i64) -> Vec<i64> {
if num % 3 != 0 {
return Vec::new();
}
let x = num / 3;
vec![x - 1, x, x + 1]
}
}
|
| /**
* @param {number} num
* @return {number[]}
*/
var sumOfThree = function (num) {
if (num % 3) {
return [];
}
const x = Math.floor(num / 3);
return [x - 1, x, x + 1];
};
|