原题链接
解题思路
这题非常明显,不能用sqrt,那就用二分法解决。本题还是有坑的,就是使用long,因为给的num可能非常大,导致两数相乘超过int。我在这里刚开始考虑没到,错了几次,
- 二分法经典步骤。先设left = 0; right = num;
- 循环left <= right ;当mid×mid == num,true退出。
- 当mid×mid < num ; left = mid + 1;否则 right = mid - 1;
- 整个二分法结束
解题代码
public class Solution {
public boolean isPerfectSquare(int num) {
long left = 0;
long right = num;
while(left <= right){
long mid = (right+left)>>1;
long val = mid*mid;
if(val == num){
return true;
}else if(val < num){
left = mid + 1;
}else{
right = mid - 1;
}
}
return false;
}
}