1. 概述
实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
2. 解题
<?php
class Solution {
/**
* @param Integer $x
* @return Integer
*/
public function mySqrt($x) {
if ($x <= 0) {
return 0;
}
$left = 1;
$right = $x;
$close = 0;
while ($left < $right) {
$mix = $left + floor(($right - $left) / 2);
$square = $mix * $mix;
if ($square > $x) {
$right = $mix - 1;
} elseif ($square == $x) {
$close = $mix;
break;
} else {
$left = $mix + 1;
$oriClose = $x - $close * $close;
$newClose = $x - $mix * $mix;
$close = min($oriClose, $newClose) == $oriClose ? $close : $mix;
}
}
return $close;
}
}
$x = 8;
$cls = new Solution();
$r = $cls->mySqrt($x);
echo $r;
