题目
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
‘’’
解题
思路
- 这里最“要脸”的解法 就是调用库函数
- 使用牛顿迭代法(这也是我也这篇博客的初衷)
- 二分查找法
代码
解答1 调用库函数
def mySqrt_function(x):
"""
:type x: int
:rtype: int
"""
import math
return math.floor(math.sqrt(x))
解答2 牛顿迭代法
原理
def mySqrt(x):
'''List item
此方法采用牛顿迭代方法
:param x:
:return:
'''
if x<=1:
return x
r=x
while r>x/r:
r=(r+x/r)//2 #这里不是就最精确的解 只是求 整数解 这里代码很细节 //2
# r=(r+x/r)/2 这个会执行更多的无用步骤,大家执行一下就知道了
print(r)
return int(r)
解答2 二分查找
def mySqrt_biSerch(x):
left=0
right=x
while left <= right:
mid = (left + right) // 2
if x > mid * mid:
left = mid + 1
ans = mid
elif x < mid * mid:
right = mid - 1
else:
return mid
return ans