x 的平方根

题意:

给你一个非负整数 x ,计算并返回 x算术平方根

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去

**注意:**不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

提示:

  • 0 <= x <= 231 - 1

题目来源: https://leetcode.cn/problems/sqrtx/description/

解题方法:

方法一:暴力循环

    /**
     * @param Integer $x
     * @return Integer
     */
    function mySqrt($x) {
        for($i = 0; $i <= $x; $i++){
            if($i * $i == $x){
                return $i;
            }
            if($i * $i < $x && ($i + 1) * ($i + 1) > $x){   //判断取整
                return $i;
            }
        }
        
    }

方法二:二分法求解

    function mySqrt($x) {
        $n = $x;
        $y = 1;
        while ($n > $y) {
            $n = intval(($n + $y) / 2);
            $y = $x / $n;
        }
        return $n;
    }

以下代码也是二分法:

  function mySqrt($x) {
        if ($x <= 1) return $x;
        $l = 1;
        $r = floor($x / 2) + 1;
        while ($l < $r) {
            //取右中位数,否则会死循环
            $mid = $l + floor(($r - $l + 1) / 2);
            if ($mid == $x / $mid) return $mid;
            if ($mid < $x  /$mid) {
                $l = $mid;
            } else {
                $r = $mid - 1;
            } 
        }
        return $l;  
    }

你可能感兴趣的:(PHP,算法,数据结构,php)