https://leetcode.com/problems/valid-perfect-square/
判断一个数是不是可以开平方
二分查找
public class Solution {
// 先开long再说;多用乘法少用除法,比如判断平方数,mid * mid == num
public boolean isPerfectSquare(int num) {
int beg = 1;
int end = num;
while (beg <= end) {
long mid = (long) beg + (end - beg) / 2;
if (mid * mid == num) {
return true;
} else if (mid * mid < num) {
beg = (int) mid + 1;
} else {
end = (int) mid - 1;
}
}
return false;
}
}
平方数 = 1 + 3 + 5 + 7......
public class Solution {
public boolean isPerfectSquare(int num) {
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}
}
牛顿平方法
>>> 无符号右移
public class Solution {
public boolean isPerfectSquare(int num) {
long x = num;
while (x * x > num) {
x = (x + num / x) >>> 1;
}
return x * x == num;
}
}