题目:
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
class Solution {
public:
// 二分法的第一种写法
bool isPerfectSquare(int num)
{
// // // 不对不对不对 不对的解法
// // int res = exp(0.5 * log(num));
// // if(res * res == num) return true;
// // else return false;
/************************************************************************/
// 二分查找法
if(num <= 2) return true;
int left = 2, right = num;
while(left <= right)
{
int mid = left + (right - left) / 2;
if((long long)mid * mid > num) right = mid - 1;
else if((long long)mid * mid < num) left = mid + 1;
else return true;
}
if((long long)(left + 1) * (left + 1) == num) return true;
else return false;
}
};