一.题目
二.思路:
完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1
、4
、9
和 16
都是完全平方数,而 3
和 11
不是。
可以使用二分法,令low=0;high=传入的num,将其折半赋予mid
因为它是某个整数的平方,而这个数的范围肯定不会超过num的一半
然后写入判定条件,因为定义的都是int型变量,所以在判定num/mid==mid后还要附加num%mid==0,两条件同时满足,才为完全平方数,同时对于num%mid!=0的情况也要说明,因为int都是向下取整,所以若余数不等于0,令low+1,与mid<(num/mid)时一致。对于mid>(num/mid),则令high-1即可。
然后在low和high之间一直实行折半查找,最终找到符合的数字
三.代码
bool isPerfectSquare(int num){
int low=0;
int high=num;
int mid;
if(num==1){
return true;
}
while(low<=high){
mid=(high+low)/2;
if(num/mid==mid&&num%mid==0){
return true;
}else if(num/mid==mid&&num%mid!=0){
low=mid+1;
}else if(mid<(num/mid)){
low=mid+1;
}else if(mid>(num/mid)){
high=mid-1;
}
}
return false;
}