69. x 的平方根

86 阅读1分钟

题目描述

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

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

示例

示例 1:

输入: 4 输出: 2 示例 2:

输入: 8 输出: 2 说明: 8 的平方根是 2.82842...,   由于返回类型是整数,小数部分将被舍去。

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/sq…

实现

// 使用二分法更快的找到该数
int mySqrt(int x)
{
    if (x == 0 || x == 1) {
        return x;
    }
    // x的平方根,最大可能就是x,最小可能是1(0的情况前面已经处理)
    int left = 1;
    int right = x;
    while (left <= right) {
        int mid = left + ((right - left) >> 1);
        if (x / mid == mid) {
            return mid;
        } else if (x / mid > mid) {    // mid * mid < x; 。x的平方根肯定在mid右边
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return right;
}