二分法:
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0:return 0
l,r = 0,x
while(l<=r):
mid = (l+r) // 2
if mid*mid == x:
return mid
elif mid*mid < x:
l = mid + 1
else:
r = mid - 1
return min(l,r)
用指数函数和对数函数来转换:
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0:return 0
ans = int(math.exp(0.5 * math.log(x)))
return ans + 1 if (ans+1)**2 <= x else ans
以上是看了官方题解
两天没写
返校了
好困