问题描述:
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt
。
示例 1:
输入:16 输出:True
示例 2:
输入:14 输出:False
基本思路:
使用夹逼二分的思路。
AC代码:
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 1, right = num;
while (left < right) {
int mid = left + (right - left) / 2;
if (mid < num / mid) left = mid + 1;
else right = mid;
}
// 注意left*left会溢出
return long(left) * long(left) == long(num)? true : false;
}
};
其它经验:
注意如果使用乘法很容易造成溢出。如果原来是int,可以换为long long