三角形类型

标签: 数组 数学 排序

难度: Easy

给你一个下标从 0 开始长度为 3 的整数数组 nums ,需要用它们来构造三角形。

  • 如果一个三角形的所有边长度相等,那么这个三角形称为 equilateral 。
  • 如果一个三角形恰好有两条边长度相等,那么这个三角形称为 isosceles 。
  • 如果一个三角形三条边的长度互不相同,那么这个三角形称为 scalene 。

如果这个数组无法构成一个三角形,请你返回字符串 "none" ,否则返回一个字符串表示这个三角形的类型。

示例 1:

输入:nums = [3,3,3]
输出:"equilateral"
解释:由于三条边长度相等,所以可以构成一个等边三角形,返回 "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 。
由于任意两边之和都大于第三边,所以可以构成一个三角形,因为三条边的长度互不相等,所以返回 "scalene"。

提示:

  • nums.length == 3
  • 1 <= nums[i] <= 100

Submission

运行时间: 20 ms

内存: 15.9 MB

class Solution:
    def triangleType(self, a: List[int]) -> str:
        a.sort()
        if a[0]+a[1]<=a[2]:  return'none'
        if max(   a   )==a[0]:return 'equilateral'
        if a[0]==a[1] or a[1]==a[2]:      return  'isosceles'
        else:   return  'scalene'

Explain

首先,这个代码通过排序数组a来简化三角形形状的判断。数组排序后,只需要检查最小的两个数之和是否大于第三个数(最大的数)来判断是否能构成三角形。如果不能构成三角形,返回'none'。如果可以构成三角形,接着检查三条边的关系:如果三条边相等,返回'equilateral';如果有两条边相等,返回'isosceles';如果三条边都不相等,返回'scalene'。代码中,判断等边三角形的条件存在错误,因为它比较了最大边和最小边是否相等,这总是错误的,正确应该是检查三边是否相等。

时间复杂度: O(1)

空间复杂度: O(1)

class Solution:
    def triangleType(self, a: List[int]) -> str:
        a.sort()  # 对数组进行排序
        if a[0] + a[1] <= a[2]:  # 检查最小的两个数之和是否大于第三个数
            return 'none'
        # 下面的等边三角形判断条件错误,应该是 a[0] == a[1] == a[2]
        if a[0] == a[1] == a[2]:  # 所有边相等
            return 'equilateral'
        if a[0] == a[1] or a[1] == a[2]:  # 至少有两边相等
            return 'isosceles'
        else:  # 三边不相等
            return 'scalene'

Explore

这种判断方法基于三角形的一个基本性质:任意两边之和必须大于第三边。这是三角形不等式定理的一部分。在代码中,数组经过排序后,最小的两个数位于数组的前两个位置,而最大的数在第三个位置。因此,为了验证能否形成三角形,我们只需检查排序后的最小两个数之和是否大于第三个数。如果这个条件不满足,即最小的两个数之和小于或等于最大数,那么这三个数就不能构成三角形。

要正确判断一个三角形是否为等边三角形,需要检查三条边是否完全相等。在代码中,等边三角形的判断应该是查看所有三条边是否相等,即 `a[0] == a[1] == a[2]`。由于数组已经排序,这种判断会确保所有边都具有相同的长度。

数组中数字的重复会影响三角形类型的判断。例如,对于数组 [2, 2, 4],首先数组排序后不变,接着检查能否构成三角形,发现 2 + 2 = 4,这满足等于第三边的条件,但根据三角形的不等式定理,任意两边之和必须严格大于第三边,因此这三个数不能构成三角形。输出应该是 'none'。