给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:输入:num = 16输出:true
示例 2:输入:num = 14 输出:false
方法1. 利用 1+3+5+7+9+…+(2n-1)=n^2,即完全平方数肯定是前n个连续奇数的和
public boolean isPerfectSquare(int num) {
for (int i = 1; num > 0; i += 2) {
num -= i;
}
return num == 0;
}
方法2. 二分
public boolean isPerfectSquare(int num) {
int start = 1, end = num;
while (start <= end) {
int mid = ((end - start) >> 1) + start;
// int mid2 = mid * mid; 越界
int mid2 = num / mid;
if (mid == mid2) {
if (num % mid == 0) {
return true;
}
start = mid + 1;
} else if (mid2 < mid) {
// 这里条件是两个mid比!
end = mid - 1;
} else {
start = mid + 1;
}
}
return false;
}