You are given a 0-indexed integer array nums of size 3 representing the side lengths of a triangle.
Return the type of the triangle:
"equilateral" if all sides are equal"isosceles" if exactly two sides are equal"scalene" if all sides are different"none" if the given sides cannot form a valid trianglenums.length == 31 <= nums[i] <= 100Check triangle inequality first, then classify the triangle based on side length equality.
Algorithm:
s1, s2, s3s1 + s2 > s3s1 + s3 > s2s2 + s3 > s1"none"s1 == s2 == s3, return "equilateral"s1 == s2 || s2 == s3 || s1 == s3, return "isosceles""scalene"This approach works because:
Example 1: nums = [3, 4, 5]
Step-by-step execution:
"scalene"Example 2: nums = [2, 2, 2]
Step-by-step execution:
"equilateral"Example 3: nums = [2, 3, 2]
Step-by-step execution:
"isosceles"Example 4: nums = [1, 2, 5]
Step-by-step execution:
"none"class Solution {
public String triangleType(int[] nums) {
int s1 = nums[0];
int s2 = nums[1];
int s3 = nums[2];
// Check triangle inequality
if (s1 + s2 <= s3 || s1 + s3 <= s2 || s2 + s3 <= s1) {
return "none";
}
// All sides equal
if (s1 == s2 && s2 == s3) {
return "equilateral";
}
// Any two equal
else if (s1 == s2 || s2 == s3 || s1 == s3) {
return "isosceles";
}
// Otherwise scalene
else {
return "scalene";
}
}
}
class Solution {
public String triangleType(int[] nums) {
Arrays.sort(nums);
int a = nums[0], b = nums[1], c = nums[2];
// Check triangle inequality
if (a + b <= c) {
return "none";
}
// Check side equality
if (a == c) {
return "equilateral";
} else if (a == b || b == c) {
return "isosceles";
} else {
return "scalene";
}
}
}
Explanation: Sort sides first, then check conditions in order.
Time Complexity: O(1) - sorting 3 elements is constant Space Complexity: O(1) - constant space
class Solution {
public String triangleType(int[] nums) {
// Check triangle inequality
if (nums[0] + nums[1] <= nums[2] ||
nums[0] + nums[2] <= nums[1] ||
nums[1] + nums[2] <= nums[0]) {
return "none";
}
// Count unique sides
Set<Integer> uniqueSides = new HashSet<>();
for (int side : nums) {
uniqueSides.add(side);
}
// Classify based on unique count
switch (uniqueSides.size()) {
case 1: return "equilateral";
case 2: return "isosceles";
case 3: return "scalene";
default: return "none";
}
}
}
Explanation: Use a Set to count unique side lengths for classification.
Time Complexity: O(1) - constant operations Space Complexity: O(1) - set size ≤ 3
class Solution {
public String triangleType(int[] nums) {
int s1 = nums[0], s2 = nums[1], s3 = nums[2];
// Check triangle inequality
if (s1 + s2 <= s3 || s1 + s3 <= s2 || s2 + s3 <= s1) {
return "none";
}
// Check equality using XOR
if ((s1 ^ s2) == 0 && (s2 ^ s3) == 0) {
return "equilateral";
} else if ((s1 ^ s2) == 0 || (s2 ^ s3) == 0 || (s1 ^ s3) == 0) {
return "isosceles";
} else {
return "scalene";
}
}
}
Explanation: Use bitwise XOR to check equality (XOR of equal numbers is 0).
Time Complexity: O(1) - constant operations Space Complexity: O(1) - constant space
| Type | Side Equality | Triangle Inequality |
|---|---|---|
| Equilateral | All three sides equal | Must satisfy |
| Isosceles | Exactly two sides equal | Must satisfy |
| Scalene | All three sides different | Must satisfy |
| None | Any classification | Fails inequality |
Triangle Inequality Theorem: For any triangle with sides a, b, c:
Key Insights: