1 解题思想
判断一个数,是不是某一个数的完全平方数,要求不能使用sqrt的内置函数
解决方式是二分查找,二分就能判断了。
这题需要注意的是,如果是int32的数,可能中间乘积的时候会溢出。。因此我选择了使用long,或者是你可以提前判断下,最大范围限定住给一个sqrt(maxint)类似的值
2 原题
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
3 AC解
public class Solution {
//这里可能会溢出,所以我选择了使用long的方式进行
public boolean check(long num,long down,long upper){
if(down > upper)
return false;
if(down == upper)
return down*down == num;
long mid = (down+upper)/2;
long tmp = mid*mid;
if(tmp == num)
return true;
if(tmp < num)
return check(num,mid+1,upper);
else return check(num,down,mid-1);
}
public boolean isPerfectSquare(int num) {
return check(num,1,num);
}
}