当前位置: 面试刷题>> 合法的三角数 (经典算法题500道)


### 题目描述补充 **题目:合法的三角数** 给定一个包含非负整数的数组,请找出数组中所有可以组成三角形的三个数的组合(每组三个数),其中三角形的形成条件是任意两边之和大于第三边。 ### 示例 **输入**:`[2, 2, 3, 4]` **输出**:`[[2, 3, 4]]` **解释**:存在一组数 [2, 3, 4],它们满足三角形的条件,即 2 + 3 > 4, 2 + 4 > 3, 3 + 4 > 2。 ### 示例代码 #### PHP ```php function validTriangles($nums) { $result = []; sort($nums); // 先排序,以便从最小的数开始组合 $n = count($nums); for ($i = 0; $i < $n - 2; $i++) { for ($j = $i + 1; $j < $n - 1; $j++) { for ($k = $j + 1; $k < $n; $k++) { if ($nums[$i] + $nums[$j] > $nums[$k]) { $result[] = [$nums[$i], $nums[$j], $nums[$k]]; } // 如果当前最小的两个数之和都小于等于第三大的数,则无需继续检查后面的数 if ($nums[$i] + $nums[$j] <= $nums[$k]) { break; } } } } return $result; } // 示例 $nums = [2, 2, 3, 4]; $triangles = validTriangles($nums); print_r($triangles); ``` #### Python ```python def valid_triangles(nums): nums.sort() # 排序 result = [] n = len(nums) for i in range(n - 2): for j in range(i + 1, n - 1): for k in range(j + 1, n): if nums[i] + nums[j] > nums[k]: result.append([nums[i], nums[j], nums[k]]) # 剪枝 if nums[i] + nums[j] <= nums[k]: break return result # 示例 nums = [2, 2, 3, 4] triangles = valid_triangles(nums) print(triangles) ``` #### JavaScript ```javascript function validTriangles(nums) { nums.sort((a, b) => a - b); // 排序 const result = []; const n = nums.length; for (let i = 0; i < n - 2; i++) { for (let j = i + 1; j < n - 1; j++) { for (let k = j + 1; k < n; k++) { if (nums[i] + nums[j] > nums[k]) { result.push([nums[i], nums[j], nums[k]]); } // 剪枝 if (nums[i] + nums[j] <= nums[k]) { break; } } } } return result; } // 示例 const nums = [2, 2, 3, 4]; const triangles = validTriangles(nums); console.log(triangles); ``` ### 码小课提醒 以上代码给出了解决合法三角数问题的三种不同语言的实现方式。码小课网站中有更多关于算法和数据结构的内容分享,欢迎大家学习交流,共同进步。
推荐面试题