题目
难度:★★☆☆☆
类型:几何
作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求:
你设计的矩形页面必须等于给定的目标面积。
宽度 W 不应大于长度 L,换言之,要求 L >= W 。
长度 L 和宽度 W 之间的差距应当尽可能小。
你需要按顺序输出你设计的页面的长度 L 和宽度 W。
说明
给定的面积不大于 10,000,000 且为正整数。
你设计的页面的长度和宽度必须都是正整数。
示例
输入: 4
输出: [2, 2]
解释: 目标面积是 4, 所有可能的构造方案有 [1,4], [2,2], [4,1]。
但是根据要求2,[1,4] 不符合要求; 根据要求3,[2,2] 比 [4,1] 更能符合要求. 所以输出长度 L 为 2, 宽度 W 为 2。
解答
本题是个几何优化问题,有三个约束:
面积指定;
长不小于宽;
长宽均为整数。
本题的优化目标是:
寻找最小长宽比的矩形;
分析思路:
如果没有长宽均为整数的限制,那么最理想的情况即为面积为输入面积area的正方形;
我们用上述正方形的边长的整数部分作为矩形宽度w的初始值,矩形长为整数的条件是w能被area整除,此时矩形宽为area // w,如果不能整除,则退而求其次,将w减1再次尝试,直到w可以被area整除为止,每轮迭代都会增大长宽比。
class Solution:
def constructRectangle(self, area):
w = int(area ** 0.5) # 宽的初始值从面积的开方开始算起
while True: # 死循环即可
if area % w == 0: # 如果面积能被当前宽整除
return [area // w, w] # 返回矩形的长和宽
else: # 否则
w -= 1 # 将宽继续减去1
如有疑问或建议,欢迎评论区留言~