题目
实现 int sqrt(int x) 函数。 计算并返回x的平方根,其中x是非负整数。 由于返回类型是整数,结果只保留整数部分,小数部分将被舍去 示例1 输入:4 输出:2 示例2 输入:8 输出:2 说明8的平方根是2.82842..., 由于返回类型是整数,小数部分将被舍去。
解析
求解平方根,直接用暴力法是 pow(x,0.5)=y, 求解y, 这种方法会存在内存错误的问题,我们采用牛顿迭代法
牛顿迭代法解析
牛顿迭代法,我们可以通过这样一种方法来理解:求长方形越来越近似与其面积相同的正方形 看如下图:
代码
我用python代码实现
def f2(number):
# 牛顿迭代法
if number < 0:
return False
if number == 0:
return 0
# 假设当前的平方根是1,类似当前的长方形的边长
cur_sqrt_value = 1
while True:
pre = cur_sqrt_value # 保存之前的值
cur_sqrt_value = (cur_sqrt_value + number/cur_sqrt_value) / 2 # 类似计算长方形的长和宽的平均值
if abs(cur_sqrt_value - pre) < 1e-6: # 1e-6是一个非常小的小数,趋近于0,意思就是这时候长方形的边长趋近于正方形的边长,长方形变得像正方形
return int(cur_sqrt_value)