Skip to main content

2177 - Find Three Consecutive Integers That Sum to a Given Number (Medium)

https://leetcode.com/problems/find-three-consecutive-integers-that-sum-to-a-given-number/

Problem Statement

Given an integer num, return three consecutive integers (as a sorted array) that sum to num. If num cannot be expressed as the sum of three consecutive integers, return an empty array.

Example 1:

Input: num = 33
Output: [10,11,12]
Explanation: 33 can be expressed as 10 + 11 + 12 = 33.
10, 11, 12 are 3 consecutive integers, so we return [10, 11, 12].

Example 2:

Input: num = 4
Output: []
Explanation: There is no way to express 4 as the sum of 3 consecutive integers.

Constraints:

  • 0 <= num <= 10^15

Approach 1: Math

We can express it as n+(n+1)+(n+2)=numn + (n + 1) + (n + 2) = num and find what nn is.

n+(n+1)+(n+2)=numn + (n + 1) + (n + 2) = num 3n+3=num3 * n + 3 = num n=(num3)/3n = (num - 3) / 3

If (num3)(num - 3) is not divisible by 33, then return empty array. Otherwise, calculate nn and return nn, n+1n + 1, and n+2n + 2.

class Solution {
public:
vector<long long> sumOfThree(long long num) {
num -= 3;
if (num % 3 == 0) {
long long n = num / 3;
return {n, n + 1, n + 2};
}
return {};
}
};

Alternatively, we can find the middle number and get the first and the third one.

class Solution {
public:
vector<long long> sumOfThree(long long num) {
if (num % 3 == 0) {
long long x = num / 3;
return {x - 1, x, x + 1};
}
return {};
}
};