二分,本来可以把right设为sqrt(INT_MAX)的,但是不能用sqrt,所以还是把right设为INT_MAX吧,设为longlong就不会越界了。
class Solution {
public:
bool isPerfectSquare(int num) {
//二分查找
//1到sqrt(INT_MAX)
long long int left = 1, right = INT_MAX;
long long int mid;
while(left <= right){
mid = left + (right-left)/2;
if(mid*mid == num) return true;
else if(mid * mid < num) left = mid+1;
else right = mid-1;
}
return false;
}
};