.
2019-11-12 星期二 开始吧 库里的深夜食堂
给定一个整型数值,写一个函数,如果这个数是一个完美的平方数就返回true,否则返回false。

二分就可以解题,这道题用正常版的二分就行了,二分找中位数,两个分支,选择了左中位数,那么左中位数的分支一定要排除掉中位值(否则死循环),右分支就不需要排除,最后必然存在left==right ,在进一步判断即可。
/**
* @param Integer $num
* @return Boolean
*/
function isPerfectSquare($num)
{
$left = 0;
$right = $num;
while ($left < $right) {
$middle = ($left + $right) >> 1;
if ($middle * $middle < $num) {
$left = $middle + 1;
} else {
$right = $middle;
}
}
return $left * $left == $num ? true : false;
}
