给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
思路:
使用两个指针 a和 b来表示从1到num之间的两个数(两端开始),
计算mid = (a+b)/2,
如果mid * mid== num则返回true
如果小于num,说明如果存在一个数n使得n * n == num的话,那么n一定大于mid,所以让a= mid+1进行下一次比较
如果大于num,则b= mid-1
数据类型使用long,不然会提示溢出
class Solution {
public:
bool isPerfectSquare(int num) {
if(num <= 0)
return false;
if(num == 1)
return true;
int a = 0;
int b = int(num/2);
while (a <= b){
long mid = (a + b)/2;
long midsqr = mid * mid;
if(midsqr == num)
return true;
if(midsqr > num){
b = mid - 1;
}
else{
a = mid + 1;
}
}
return false;
}
};