问题描述:
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-perfect-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果:
代码描述:
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 1; // 不能从0开始,否则会出现分母为0的情况
int right = num;
int mid;
while(left <= right)
{
mid = left + (right - left)/2;
if(num/mid < mid) // 此处应该用除法,否则 mid*mid会越界
{
right = mid - 1;
}
else if(num/mid > mid)
{
left = mid + 1;
}
else
{
if(mid * mid == num) // 由于整数除法,会出现省了小数,所以需要再判断一下
return true;
return false;
}
}
return false;
}
};
相似问题:求某数的平方根: