Back to challenges
Medium 0 solved 0% acceptance

Find Right-Triangle Triples

List all integer right triangles with a specified perimeter.

What you'll learn

  • List all integer right triangles for a perimeter
  • Avoid duplicates by ordering sides
  • Prune the search with bounds

Problem

Find every triple of positive integers a < b < c for which a² + b² = c² and a + b + c = perimeter. Return each triple as [a, b, c], ordered by increasing a and then b. Do not include permutations of the same sides.

Implement pythagorean_triplets(perimeter).

Input

perimeter: The required sum of all three sides.

Output

Return a list of triples in the specified order.

Constraints

3 ≤ perimeter ≤ 100,000. Return an empty list if no triangle qualifies.

Examples

Example 1
Input:
perimeter = 30

Expected output:
expected = [
    [5, 12, 13]
]
Input:
long long perimeter = 30;

Expected output:
std::vector<std::vector<long long>> expected = {
    {5, 12, 13}
};
Input:
long perimeter = 30;

Expected output:
long[][] expected = new long[][] {
    new long[] {5, 12, 13}
};

Explanation

5 + 12 + 13 = 30 and 5² + 12² = 13². This is the only qualifying triple.

Example 2
Input:
perimeter = 11

Expected output:
expected = []
Input:
long long perimeter = 11;

Expected output:
std::vector<std::vector<long long>> expected = {};
Input:
long perimeter = 11;

Expected output:
long[][] expected = new long[][] {};

Explanation

No increasing positive integer right-triangle triple sums to 11.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

A valid triple must satisfy both the Pythagorean equation and the perimeter sum.

Hint 2

Use the perimeter to limit the search instead of trying every ordering of sides.

Hint 3

Remember to keep only a < b < c, and skip duplicates from symmetric side choices.

Expected complexity

O(n^2) time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.