题目
示例 1:
输入:x = 4
输出:2
示例 2:
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。
提示:
0 <= x <= 231 - 1
【代码】
执行用时:44 ms, 在所有 Python3 提交中击败了57.03% 的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了15.94% 的用户
通过测试用例:1017 / 1017
class Solution:
def mySqrt(self, x: int) -> int:
left,right=0,x
while left<=right:
mid=left+(right-left)//2
if mid*mid==x:
return mid
elif mid*mid<x:
left=mid+1
else:
right=mid-1
return right
【方法2】
执行用时:36 ms, 在所有 Python3 提交中击败了90.57% 的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了78.58% 的用户
通过测试用例:1017 / 1017
class Solution:
def mySqrt(self, x: int) -> int:
left,right,ans=0,x,-1
while left<=right:
mid=left+(right-left)//2
if mid*mid<=x:
ans=mid
left=mid+1
else:
right=mid-1
return ans
【方法3】牛顿迭代法
执行用时:36 ms, 在所有 Python3 提交中击败了90.57% 的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了18.06% 的用户
通过测试用例:1017 / 1017
class Solution:
def mySqrt(self, x: int) -> int:
left,right=0,x
def cal(n):
res=(n+x/n)/2
if res==n:
return n
else:
return cal(res)
if x==0:return x
return int(cal(x))
【方法4:牛顿迭代法】
执行用时:44 ms, 在所有 Python3 提交中击败了57.03% 的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了84.44% 的用户
通过测试用例:1017 / 1017
class Solution:
def mySqrt(self, x: int) -> int:
if x==0:return 0
cur=x
while True:
temp=(cur+x/cur)/2
if cur-temp<1e-7:
break
cur=temp
return int(cur)