1. 题目解析与需求拆解
LeetCode 492题"Construct the Rectangle"是一道考察基础数学运算能力的算法题。题目要求我们根据给定的网页面积,设计一个长宽比例最优的矩形网页。具体需求可以拆解为三个核心条件:
- 面积约束:长(L) × 宽(W) = 给定面积(area)
- 尺寸关系:长度必须大于等于宽度(L ≥ W)
- 最优比例:长宽差值(L-W)尽可能小
这道题在真实网页开发中确实有实际应用场景。比如响应式设计时,我们需要确保容器在不同设备上都能保持协调的长宽比例。当设计师给定了某个元素的像素面积后,开发人员需要计算出最"方正"的矩形尺寸。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路分析
2.1 数学原理
这道题本质上是在寻找一个数的因数对,且这对因数尽可能接近。数学上,我们知道:
- 对于任何正整数n,其因数总是成对出现
- 最接近的因数对一定出现在√n附近
- 因此从√n开始向下查找,第一个能整除n的数就是我们要找的宽度W
2.2 算法选择
基于上述数学原理,我们可以设计如下算法:
- 计算给定面积的平方根,并取整得到初始宽度w
- 从w开始递减检查,直到找到能整除area的最大整数
- 对应的长度L就是area/w
- 返回[L, w]
这种算法的时间复杂度是O(√n),因为最坏情况下我们需要检查从√n到1的所有整数。
3. 代码实现详解
3.1 基础实现
java复制class Solution {
public int[] constructRectangle(int area) {
int w = (int)Math.sqrt(area);
while (area % w != 0) w--;
return new int[]{area/w, w};
}
}
代码解析:
Math.sqrt(area)计算平方根并强制转换为int,得到初始宽度wwhile循环递减w,直到area能被w整除- 返回结果数组,注意顺序是[L, W]
3.2 边界情况处理
虽然题目保证输入是正整数,但好的编程习惯应该考虑边界情况:
java复制c
