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 == 3
  • 1 <= nums[i] <= 100

解题思路

这道题需要我们判断三条边是否能构成三角形,以及构成什么类型的三角形。

解题思路:

  1. 三角形存在条件:对于三条边 a、b、c,能构成三角形的充要条件是任意两边之和大于第三边。为了简化判断,我们可以先对数组排序,然后只需要验证较小的两边之和是否大于最大边即可。

  2. 三角形类型判断

    • 等边三角形:三条边都相等
    • 等腰三角形:恰好有两条边相等
    • 不等边三角形:三条边都不相等

算法步骤:

  1. 对数组进行排序,便于后续判断
  2. 检查是否满足三角形条件:nums[0] + nums[1] > nums[2]
  3. 如果不满足,返回 "none"
  4. 如果满足,根据相等边的数量判断三角形类型:
    • 三条边都相等:等边三角形
    • 有两条边相等:等腰三角形
    • 三条边都不相等:不等边三角形

时间复杂度主要来自排序操作,整体算法简洁高效。

代码实现

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)只使用了常数额外空间