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 Returns: True
Example 2:
Input: 14 Returns: False
直接因式分解。。如果因子都是成对出现的,就是平方数。
public static boolean isPerfectSquare(int num)
{
if(num==1)
return true;
long i=2;
long numcpy=num;
while(num>1)
{
if(i*i>numcpy)
return false;
int cnt=0;
while(num%i==0)
{
num/=i;
cnt++;
}
if(cnt%2==1)
return false;
i++;
}
return true;
}
-----------------------------------------------------------------------------
public boolean isPerfectSquare(int num){
if(num <= 0) return false;
int left = 1, right = num;
while(left <= right){
int mid = left + (right - left)/2;
// use "/" to avoid overflow
if(mid > num / mid){
right = mid - 1;
}else if(mid < num / mid){
left = mid + 1;
}else{
return num % mid == 0;
}
}
return false;
}