Problem
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
too young 思路
我能想到的就是遍历了,平方不超过的最大整数。。
倒是跑通了
输入:2147395599
报错:MemoryError
dalao思路-40ms
二分查找 binary search
class Solution(object):
def mySqrt(self, x):
if x == 0:
return 0
left = 0
right = x
while True:
mid = left + (right-left)/2
if (mid * mid > x):
right = mid - 1
else:
if (mid+1) * (mid+1) > x:
return mid
left = mid + 1
巨佬预警-28ms
利用了牛顿迭代法,看了很久终于看懂了
参考教程:https://matongxue.com/madocs/205.html
推导如下
class Solution(object):
def mySqrt(self, x):
r = x
while r * r > x:
r = (r + x/r)/2
return r