Easy
题目描述
给你一个长度为 3 的整数数组 nums,表示三角形的三条边。
- 如果三角形的三条边长度相等,则称为等边三角形。
- 如果三角形恰好有两条边长度相等,则称为等腰三角形。
- 如果三角形的三条边长度都不相等,则称为不等边三角形。
请你返回表示三角形类型的字符串,如果给定的边长无法构成三角形,则返回 "none"。
示例 1:
输入:nums = [3,3,3]
输出:"equilateral"
解释:由于所有边的长度相等,因此可以构成等边三角形。
示例 2:
输入:nums = [3,4,5]
输出:"scalene"
解释:
nums[0] + nums[1] = 3 + 4 = 7,大于 nums[2] = 5。
nums[0] + nums[2] = 3 + 5 = 8,大于 nums[1] = 4。
nums[1] + nums[2] = 4 + 5 = 9,大于 nums[0] = 3。
由于任意两边之和都大于第三边,因此可以构成三角形。
由于所有边的长度都不相等,因此可以构成不等边三角形。
约束条件:
nums.length == 31 <= nums[i] <= 100
解题思路
这道题需要我们判断三条边是否能构成三角形,以及构成什么类型的三角形。
解题思路:
三角形存在条件:对于三条边 a、b、c,能构成三角形的充要条件是任意两边之和大于第三边。为了简化判断,我们可以先对数组排序,然后只需要验证较小的两边之和是否大于最大边即可。
三角形类型判断:
- 等边三角形:三条边都相等
- 等腰三角形:恰好有两条边相等
- 不等边三角形:三条边都不相等
算法步骤:
- 对数组进行排序,便于后续判断
- 检查是否满足三角形条件:
nums[0] + nums[1] > nums[2] - 如果不满足,返回
"none" - 如果满足,根据相等边的数量判断三角形类型:
- 三条边都相等:等边三角形
- 有两条边相等:等腰三角形
- 三条边都不相等:不等边三角形
时间复杂度主要来自排序操作,整体算法简洁高效。
代码实现
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[1] && nums[1] == nums[2]) {
return "equilateral";
} else if (nums[0] == nums[1] || nums[1] == nums[2]) {
return "isosceles";
} else {
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[1] == nums[2]:
return "equilateral"
elif nums[0] == nums[1] or nums[1] == nums[2]:
return "isosceles"
else:
return "scalene"
public class Solution {
public string TriangleType(int[] nums) {
Array.Sort(nums);
// 检查是否能构成三角形
if (nums[0] + nums[1] <= nums[2]) {
return "none";
}
// 判断三角形类型
if (nums[0] == nums[1] && nums[1] == nums[2]) {
return "equilateral";
} else if (nums[0] == nums[1] || nums[1] == nums[2]) {
return "isosceles";
} else {
return "scalene";
}
}
}
var triangleType = function(nums) {
nums.sort((a, b) => a - b);
// 检查是否能构成三角形
if (nums[0] + nums[1] <= nums[2]) {
return "none";
}
// 判断三角形类型
if (nums[0]
复杂度分析
| 复杂度类型 | 复杂度 | 说明 |
|---|---|---|
| 时间复杂度 | O(1) | 虽然有排序操作,但数组长度固定为3,所以是常数时间 |
| 空间复杂度 | O(1) | 只使用了常数额外空间 |