[LeetCode]69. x 的平方根(Sqrt(x))

题目描述

实现 int sqrt(int x) 函数。

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

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

示例 1:

输入: 4
输出: 2

示例 2:

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

解题思路

  1. 解法一:二分法。
  2. 解法二:牛顿法。

代码

Python 3.6

解法一:二分法

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0 or x == 1:
return x
left, right = 1, x // 2
while left < right:
mid = int((left + right + 1) >> 1)
if mid * mid > x:
right = mid - 1
else:
left = mid
return left

执行用时 : 52 ms
内存消耗 : 14 MB

解法二:牛顿法

1
2
3
4
5
6
7
8
9
10
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0 or x == 1:
return x
x0 = 0
x1 = x
while abs(x1 - x0) >= 1:
x0 = x1
x1 = x1 / 2 + x / (2 * x1)
return int(x1)

执行用时 : 44 ms
内存消耗 : 13.8 MB