思想:
采用非递归的二分搜索思想
注1:
会出现 mid * mid == num溢出的情况,所以我们判断得用除法:
num / mid == mid && num % mid == 0
mid * mid < num:
num / mid > mid || (num / mid == mid && num % mid > 0)
注2:
while(left <= right)
while(left < right)
是两种情况,注意区分
代码:
class Solution {
public boolean isPerfectSquare(int num) {
int left = 1, right = num;
while(left <= right){
int mid = (left + right) / 2;
if(num / mid == mid && num % mid == 0)return true;
if(num / mid > mid || (num / mid == mid && num % mid > 0))left = mid + 1;
else right = mid - 1;
}
return false;
}
}