题目:
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
思路
这题很恶心啊,能用的函数不让用,必须要自己搞才行。
既然要乘法,那好办,如果出现这样一种情况
存在某个数a,
a*a < x
(a+1) * (a+1) > x
那么a就满足条件了
如何实现代码呢?第一反应是不是循环?
戳啦!不怕爆炸吗(误
来试试无敌的二分法吧
简单来说就是定义边界0和x,取中点mid,然后根据mid*mid的情况缩小范围。
直接上代码
class Solution:
def mySqrt(self, x: int) -> int:
low, high = 0, x
temp = 0
while low <= high:
mid = (low + high) // 2
if mid * mid == x:
return mid
elif mid * mid < x:
temp = mid
low = mid + 1
else:
high = mid - 1
return temp