You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode构造矩形问题:无法理解代码中的判断逻辑求助

LeetCode「构造矩形」解法逻辑拆解

1. 为啥(area/w)*w == area不是永远成立?

这里用的是Java的整数除法,两个int相除会直接砍掉小数部分。只有当w是area的正约数时,area除以w才没有余数,此时area/w的结果乘回w才等于原area。如果w不是约数,area/w会舍去余数,再乘w得到的数肯定比area小,条件自然不成立。

举个例子:area=26,w=5时,26/5等于5(不是5.2),5*5=25,显然不等于26,条件就不满足。

2. 循环是怎么跑起来的?

循环从w=(int)Math.sqrt(area)开始,每次w减1,直到找到第一个符合条件的w:

  • 从平方根开始找的核心原因:要让长L和宽W的差值最小,W得尽可能接近area的平方根(因为L=area/W,W越接近平方根,L和W的差距就越小)。
  • 一旦找到第一个能整除area的w,直接返回[area/w, w]就行——因为这是最大的可能w(最接近平方根),对应的L和W差值肯定是最小的。

3. 拿area=26来一步步看

  • sqrt(26)大概是5.099,转成int后w从5开始:
    • w=5:(26/5)*5=5*5=25≠26,不满足,w减到4。
    • w=4:(26/4)*4=6*4=24≠26,不满足,w减到3。
    • w=3:(26/3)*3=8*3=24≠26,不满足,w减到2。
    • w=2:(26/2)*2=13*2=26,刚好等于area,满足条件,直接返回[13,2]。这就是正确结果,因为13和2的差是11,比另一组可能的[26,1]差25要小得多。

额外提一句

代码最后返回空数组只是个形式,因为area是正整数,w最后一定会减到1,而1肯定能整除任何正整数,所以必然会在w=1时返回[area,1],根本走不到返回空数组那一步。

内容的提问来源于stack exchange,提问作者Amanda James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:46:00