看到平方数,不让使用内置函数,首先想到使用二分查找,找到对应的 mid*mid = num值
有效完全平方数
class Solution {
public boolean isPerfectSquare(int num) {
//折半查找进行判断 分为奇偶数进行查询
int left = 0, right = num;
while (left <= right) {
//中心位置
int mid = (right - left) / 2 + left;
//进行long类型的求乘积,不先进行求乘积会超时
long square = (long) mid * mid;
if (square < num) {
left = mid + 1;
} else if (square > num) {
right = mid - 1;
} else {
return true;
}
}
return false;
}
}
sqrt(x)
进行求出给定数值的算术平方根
class Solution {
public int mySqrt(int x) {
int left = 0, right = x, ans = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if ((long) mid * mid <= x) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}
}