题目
判断一个数是不是一个完全平方数,不可以用内置函数
例如:
Input: 16 Returns: True
思路:BinarySearch
一些小trick:
- mid = left + (right - left)/2 来替换 mid = (left + right)/2 可能出现的溢出
- 判断mid*mid == num 时同样可能发生溢出,换成(num/mid == mid) && (num % mid == 0)来避免溢出
- 避免溢出:先用减法或者除法变小这个数!
程序:
public class Solution {
public boolean isPerfectSquare(int num) {
if(num == 0) return true;
return binarysearch(1, num, num);
}
public boolean binarysearch(int left, int right, int num) {
if(left > right) return false;
int mid = left+(right-left)/2;
if(num/mid == mid && num % mid == 0) return true;
else if(mid > num/mid) return binarysearch(left, mid-1, num);
else return binarysearch(mid+1, right, num);
}
}