题目描述
给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
不能使用任何内置的库函数,如 sqrt() 。
问题分析
采用二分法去寻找平方根,最后一定会将数字锁定到某一个整数上,然后比较此整数平方是否等于目标数即可。
时间复杂度在
O
(
l
o
g
2
n
)
O(log_2n)
O(log2n)
代码
bool isPerfectSquare(int num){
int left = 0;
int right = num;
long long middle = (left+right)/2;
if(num==1){
return true;
}
long long n = num;
while(left<=right){
if(middle*middle>n){
right = middle-1;
}else if(middle*middle==n){
return true;
}else{
left = middle+1;
}
middle = (left+right)/2;
}
if(middle*middle == n){
return true;
}
return false;
}