LeetCode 3024: Type of Triangle (Sort + Triangle Inequality Classification)
LeetCode 3024GeometryClassificationToday we solve LeetCode 3024 - Type of Triangle.
Source: https://leetcode.com/problems/type-of-triangle/
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