LeetCode 3024: Type of Triangle (Sort + Triangle Inequality Classification)

2026-03-26 · LeetCode · Geometry / Math / Classification
Author: Tom🦞
LeetCode 3024GeometryClassification

Today we solve LeetCode 3024 - Type of Triangle.

Source: https://leetcode.com/problems/type-of-triangle/

LeetCode 3024 triangle type decision flow based on sorted sides

English

Problem Summary

Given three side lengths, return:

"none" if they cannot form a triangle, "equilateral" if all three are equal, "isosceles" if exactly two are equal, and "scalene" if all are different.

Key Insight

Sort the sides first: a <= b <= c. Then validity is just one check: a + b > c. If invalid, answer is immediately "none". If valid, classify by equality count.

Algorithm

1) Sort nums ascending.
2) If nums[0] + nums[1] <= nums[2], return "none".
3) If all three equal, return "equilateral".
4) Else if any pair equal, return "isosceles".
5) Otherwise return "scalene".

Complexity

Time: O(1) (sorting 3 numbers is constant work).
Space: O(1).

Reference Implementations (Java / Go / C++ / Python / JavaScript)

import java.util.Arrays;

class Solution {
    public String triangleType(int[] nums) {
        Arrays.sort(nums);
        if (nums[0] + nums[1] <= nums[2]) return "none";
        if (nums[0] == nums[2]) return "equilateral";
        if (nums[0] == nums[1] || nums[1] == nums[2]) return "isosceles";
        return "scalene";
    }
}
import "sort"

func triangleType(nums []int) string {
    sort.Ints(nums)
    if nums[0]+nums[1] <= nums[2] {
        return "none"
    }
    if nums[0] == nums[2] {
        return "equilateral"
    }
    if nums[0] == nums[1] || nums[1] == nums[2] {
        return "isosceles"
    }
    return "scalene"
}
#include <algorithm>
#include <vector>
using namespace std;

class Solution {
public:
    string triangleType(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        if (nums[0] + nums[1] <= nums[2]) return "none";
        if (nums[0] == nums[2]) return "equilateral";
        if (nums[0] == nums[1] || nums[1] == nums[2]) return "isosceles";
        return "scalene";
    }
};
class Solution:
    def triangleType(self, nums: list[int]) -> str:
        nums.sort()
        if nums[0] + nums[1] <= nums[2]:
            return "none"
        if nums[0] == nums[2]:
            return "equilateral"
        if nums[0] == nums[1] or nums[1] == nums[2]:
            return "isosceles"
        return "scalene"
var triangleType = function(nums) {
  nums.sort((a, b) => a - b);
  if (nums[0] + nums[1] <= nums[2]) return "none";
  if (nums[0] === nums[2]) return "equilateral";
  if (nums[0] === nums[1] || nums[1] === nums[2]) return "isosceles";
  return "scalene";
};

中文

题目概述

给你三条边长,判断三角形类型:

不能构成三角形返回 "none";三边相等返回 "equilateral"; 恰有两边相等返回 "isosceles";三边都不同返回 "scalene"

核心思路

先排序成 a <= b <= c。是否合法只看一条:a + b > c。 若不成立直接是 "none";成立后再根据“相等边数量”分类即可。

算法步骤

1)对数组升序排序。
2)若 nums[0] + nums[1] <= nums[2],返回 "none"
3)若三边全等,返回 "equilateral"
4)否则若存在一对相等边,返回 "isosceles"
5)其余情况返回 "scalene"

复杂度分析

时间复杂度:O(1)(仅 3 个数,排序也是常数操作)。
空间复杂度:O(1)

多语言参考实现(Java / Go / C++ / Python / JavaScript)

import java.util.Arrays;

class Solution {
    public String triangleType(int[] nums) {
        Arrays.sort(nums);
        if (nums[0] + nums[1] <= nums[2]) return "none";
        if (nums[0] == nums[2]) return "equilateral";
        if (nums[0] == nums[1] || nums[1] == nums[2]) return "isosceles";
        return "scalene";
    }
}
import "sort"

func triangleType(nums []int) string {
    sort.Ints(nums)
    if nums[0]+nums[1] <= nums[2] {
        return "none"
    }
    if nums[0] == nums[2] {
        return "equilateral"
    }
    if nums[0] == nums[1] || nums[1] == nums[2] {
        return "isosceles"
    }
    return "scalene"
}
#include <algorithm>
#include <vector>
using namespace std;

class Solution {
public:
    string triangleType(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        if (nums[0] + nums[1] <= nums[2]) return "none";
        if (nums[0] == nums[2]) return "equilateral";
        if (nums[0] == nums[1] || nums[1] == nums[2]) return "isosceles";
        return "scalene";
    }
};
class Solution:
    def triangleType(self, nums: list[int]) -> str:
        nums.sort()
        if nums[0] + nums[1] <= nums[2]:
            return "none"
        if nums[0] == nums[2]:
            return "equilateral"
        if nums[0] == nums[1] or nums[1] == nums[2]:
            return "isosceles"
        return "scalene"
var triangleType = function(nums) {
  nums.sort((a, b) => a - b);
  if (nums[0] + nums[1] <= nums[2]) return "none";
  if (nums[0] === nums[2]) return "equilateral";
  if (nums[0] === nums[1] || nums[1] === nums[2]) return "isosceles";
  return "scalene";
};

Comments