367. 有效的完全平方数
给定一个 正整数 num
,编写一个函数,如果 num
是一个完全平方数,则返回 true
,否则返回false
。
进阶:不要 使用任何内置的库函数,如 sqrt
。
class Solution {
public boolean isPerfectSquare(int num) {
int l = 1, r = num;
while (l <= r) {
long mid = (l + r) >>> 1;
if (mid * mid == num)
return true;
else if (mid * mid < num)
l = (int) mid + 1;
else
r = (int) mid - 1;
}
return false;
}
}
69. Sqrt(x)
给你一个非负整数 x
,计算并返回 x
的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
class Solution {
public int mySqrt(int x) {
if (x == 0)
return 0;
int l = 1, r = x, mid;
while (l <= r) {
mid = (l + r) >>> 1;
if (mid <= x/mid && (mid + 1) > x/(mid + 1)) //aka (mid^2) <= x && ((mid+1)^2) > x
return mid;
if (mid < x / mid)
l = mid + 1;
else
r = mid - 1;
}
return -1;
}
}