作為一位web開發(fā)者糙捺, 懂得怎樣去規(guī)劃一個(gè)頁面的尺寸是很重要的朝巫。 現(xiàn)給定一個(gè)具體的矩形頁面面積坠陈,你的任務(wù)是設(shè)計(jì)一個(gè)長度為 L 和寬度為 W 且滿足以下要求的矩形的頁面谓谦。要求:
1. 你設(shè)計(jì)的矩形頁面必須等于給定的目標(biāo)面積贫橙。
2. 寬度 W 不應(yīng)大于長度 L,換言之反粥,要求 L >= W 卢肃。
3. 長度 L 和寬度 W 之間的差距應(yīng)當(dāng)盡可能小。
你需要按順序輸出你設(shè)計(jì)的頁面的長度 L 和寬度 W才顿。
示例:
輸入: 4
輸出: [2, 2]
解釋: 目標(biāo)面積是 4莫湘, 所有可能的構(gòu)造方案有 [1,4], [2,2], [4,1]。
但是根據(jù)要求2郑气,[1,4] 不符合要求; 根據(jù)要求3幅垮,[2,2] 比 [4,1] 更能符合要求. 所以輸出長度 L 為 2, 寬度 W 為 2尾组。
說明:
- 給定的面積不大于 10,000,000 且為正整數(shù)忙芒。
- 你設(shè)計(jì)的頁面的長度和寬度必須都是正整數(shù)。
我的算法實(shí)現(xiàn)為:
/**
* @param {number} area
* @return {number[]}
*/
var constructRectangle = function (area) {
// 計(jì)算差值
let dValue = area - 1
let returnData = [area, 1]
// 如果此時(shí)差值為 0 讳侨,說明 area 肯定是 1
if (dValue === 0) {
return [1, 1]
}
// 保存除數(shù)
let divisor = 0
for (let i = 2; i <= (divisor = area / i); i++) {
const newDValue = divisor - i
// 如果整除并且差值小于上邊的呵萨,那么就更新最新的差值
if (area % i === 0 && newDValue < dValue) {
dValue = newDValue
returnData = [divisor, i]
}
}
return returnData
};
我的實(shí)現(xiàn)思路就是遍歷,如果余數(shù)為 0 跨跨,說明整除潮峦,然后再看差值是否縮小(其實(shí)本身就是一直在縮杏掠ぁ)忱嘹。至于條件,我發(fā)現(xiàn)如果除數(shù)中的兩個(gè)都滿足不大于或不小于另一個(gè)耕渴。
改進(jìn)后的代碼:
/**
* @param {number} area
* @return {number[]}
*/
var constructRectangle = function (area) {
let returnData = [area, 1]
// 保存除數(shù)
let divisor = 0
for (let i = 2; i <= (divisor = area / i); i++) {
// 如果整除并且差值小于上邊的拘悦,那么就更新最新的差值
if (area % i === 0) {
returnData = [divisor, i]
}
}
return returnData
};
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/construct-the-rectangle
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)橱脸,非商業(yè)轉(zhuǎn)載請注明出處础米。