Given a positive integer num, write a function which returns True if num is a perfect square else False.
Note:
Do not use any built-in library function such as sqrt
.
Example 1:
Input: 16
Output: true
Example 2:
Input: 14
Output: false
这道题目要求判断给出的数字是不是某一个整数的平方,而且要求不让用sqrt
,那就没得选了,只能找从0开始找到一个数,计算这个数的平方,判断是不是等于题目所给。于是二分搜索便起到了很好的作用。因为leetcode
给出的int
类型一般是32位有符号整数,偷偷计算出sqrt(INT32_MAX)=46341
,那么如果mid
大于这个数,说明当前的mid
肯定偏大了。时间复杂度为O(lognum)
。
bool isPerfectSquare(int num)
{
int begin = 1, end = num, mid;
while(begin < end)
{
mid = (begin + end) / 2;
if(mid >= 46341){end = mid;continue;}
if(mid * mid == num)return true;
if(mid * mid > num)end = mid;
else begin = mid + 1;
}
return (begin * begin) == num;
}