周长 = 边长 * 4
Python3
方法 1 :枚举
class Solution:
def minimumPerimeter(self, neededApples: int) -> int:
n = 1
while 2 * n * (n + 1) * (2 * n + 1) < neededApples:
n += 1
return 8 * n # (n, n)为 右上角 坐标 n * 2 * 4
方法 2 :二分查找
class Solution:
def minimumPerimeter(self, neededApples: int) -> int:
left, right, res = 0, 100000, 0
while left <= right:
mid = left + (right - left)//2
if 2 * mid * (mid + 1) * (2 * mid + 1) >= neededApples:
res = mid
right = mid - 1
else:
left = mid + 1
return res * 8
C++
方法: 二分查找
class Solution {
public:
long long minimumPerimeter(long long neededApples) {
long long left = 1, right = 100000, res = 0;
while (left <= right){
long long mid = (left + right)/2;
if (2 * mid * (mid + 1) * (2 * mid + 1) >= neededApples){
res = mid;
right = mid - 1;
}
else{
left = mid + 1;
}
}
return res * 8;
}
};