題目
連結
LeetCode 492[構造矩形]
詳情
例項
提示
題解
思路
用 sqrt
函式求 area 的算術平方根 fl
強制轉換 將算術平方根 fl 取整為 iLenth
求 iLenth 和 fl 的差:
若為0,則長寬均為 iLenth,加入容器,直接輸出
若不為0,則用 for
迴圈將 iLenth 逐漸遍歷至 area
iLenth 強制轉換為浮點型 flLenth,為了求取準確的寬度
求取 flWide = area / flLenth
然後將 flWide 強制轉換為整型 iWide
求 iWide 和 flWide 的差:
若不為0,則繼續遍歷
若為0,則:判斷 iLenth 和 iWide 的大小,將大值先加入容器,小值後加入容器後輸出容器
程式碼
class Solution {
public:
vector<int> constructRectangle(int area) {
vector<int> vecRet;
float fl = sqrt(area);//取面積的算術平方根
int iLenth = fl;//取整
if (0 == iLenth - fl)//若算術平方根為整數,則長寬相等,直接輸出
{
vecRet.push_back(iLenth);
vecRet.push_back(iLenth);
return vecRet;
}
for (; iLenth <= area; iLenth++)//遍歷長
{
float flWide = area / (float)iLenth;//取寬
int iWide = flWide;
if (0 != iWide - flWide)//寬不為整數,繼續遍歷
continue;
//長寬為整數,直接輸出
if (iLenth > iWide)//保證長大於寬
{
vecRet.push_back(iLenth);
vecRet.push_back(iWide);
}
else
{
vecRet.push_back(iWide);
vecRet.push_back(iLenth);
}
break;
}
return vecRet;
}
};