LeetCode之Construct the Rectangle

举报
chenyu 发表于 2021/07/27 01:59:07 2021/07/27
【摘要】 1、题目 For a web developer, it is very important to know how to design a web page's size. So, given a specific rectangular web page’s area, your job by now is to design a rectangular web ...

1、题目

For a web developer, it is very important to know how to design a web page's size. So, given a specific rectangular web page’s area, your job by now is to design a rectangular web page, whose length L and width W satisfy the following requirements:


   
  1. 1. The area of the rectangular web page you designed must equal to the given target area.
  2. 2. The width W should not be larger than the length L, which means L >= W.
  3. 3. The difference between length L and width W should be as small as possible.
You need to output the length L and the width W of the web page you designed in sequence.

 

Example:


   
  1. Input: 4
  2. Output: [2, 2]
  3. Explanation: The target area is 4, and all the possible ways to construct it are [1,4], [2,2], [4,1].
  4. But according to requirement 2, [1,4] is illegal; according to requirement 3, [4,1] is not optimal compared to [2,2]. So the length L is 2, and the width W is 2.

 

Note:

  1. The given area won't exceed 10,000,000 and is a positive integer
  2. The web page's width and length you designed must be positive integers.

 


2、代码实现


   
  1. public class Solution {
  2. public int[] constructRectangle(int area) {
  3. if (area < 0)
  4. return null;
  5. int[] a = new int[2];
  6. if (area == 0) {
  7. a[0] = 0;
  8. a[1] = 0;
  9. return a;
  10. }
  11. int mid = (int)Math.sqrt(area);
  12. if (mid == 1) {
  13. a[0] = area;
  14. a[1] = 1;
  15. return a;
  16. }
  17. int l1 = 0, l2 = 0;
  18. int w1 = 0, w2 = 0;
  19. int sub1 = 0, sub2 = 0;
  20. //area是平方数的时候
  21. if (mid * mid == area) {
  22. a[0] = mid;
  23. a[1] = mid;
  24. return a;
  25. } else {
  26. for (int i = mid; i > 0; --i) {
  27. if (area % i == 0) {
  28. l1 = area / i;
  29. w1 = i;
  30. sub1 = mid - i;
  31. break;
  32. }
  33. }
  34. for (int j = mid; j <= area; ++j) {
  35. if (area % j == 0) {
  36. w2 = area / j;
  37. l2 = j;
  38. sub2 = j - mid;
  39. }
  40. }
  41. }
  42. if (sub1 <= sub2) {
  43. a[0] = l1;
  44. a[1] = w1;
  45. } else {
  46. a[0] = l2;
  47. a[1] = w2;
  48. }
  49. return a;
  50. }
  51. }

 
 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/69939276

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。