这是一道很简单的题,使用二分法可以很快解出。
但仍有许多需要注意的地方,比如:
1. 必须使用long long int 型变量,否则会导致int溢出。
2. 在判断 mid 和 num 关系时,应使用 mid,而非 num/mid。
题目描述:
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
class Solution {
public:
bool isPerfectSquare(long long int num) {
if(num == 1) return true;
long long int left = 1;
long long int right = num / 2;
while(left < right){
long long int mid = left + (right - left) / 2;
if(mid * mid == num) return true;
else if(mid * mid < num) left = mid + 1;
else right = mid;
}
if(left * left == num) return true;
return false;
}
};