- 实现 int sqrt(int x) 函数。
-
- 计算并返回 x 的平方根,其中 x 是非负整数。
-
- 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
-
- 示例 1:
-
- 输入: 4
- 输出: 2
- 示例 2:
-
- 输入: 8
- 输出: 2
- 说明: 8 的平方根是 2.82842...,
- 由于返回类型是整数,小数部分将被舍去
-
- 来源:力扣(LeetCode)
- 链接:https://leetcode-cn.com/problems/sqrtx
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这个问题分两种情况:
第 1 种就是最基本的二分法查找目标值,而第 2 种可以转化成寻找最右边的满足条件的值,在这个问题里,这个条件就是 target 的平方小于 x (因为题目要求结果只保留整数部分)。
需要特别注意一下的是 0 和 1 这两个数字,不过上面的算法对这两个数字也是有效的。
Python Code
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
l, r, m = 0, x, 0
while l <= r:
m = l + (r - l) // 2
if m ** 2 == x: return m
elif m ** 2 > x : r = m - 1
else: l = m + 1
return r