给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5)
或者 x ** 0.5
。
示例 1:
输入:x = 4
输出:2
示例 2:
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。
这题直接不会
官方解,实际上是一道搜索题
class Solution(object):
def mySqrt(self, x):
return int(math.sqrt(x))
class Solution(object):
def mySqrt(self, x):
sqrt = 1
while sqrt * sqrt <= x:
sqrt += 1
return sqrt - 1
https://blog.csdn.net/CSDNLHCC/article/details/133893219?spm=1001.2014.3001.5501
class Solution(object):
def mySqrt(self, x):
l = -1
r = x + 1
while l + 1 < r: # 注意 这里是 l + 1 < r
mid = l + (r-l)//2
if mid ** 2 <= x: # 这里小于等于,然后返回 r-1 即可
l = mid
else:
r = mid
return r - 1
f(x)=num - x ^ 2
的零点,Xn+1 = Xn - f(Xn)/f'(Xn)
f'(x) = -2x
Xn+1 = Xn +(num - Xn ^ 2)/2Xn = (num + Xn ^ 2) / 2Xn = (num / Xn + Xn) / 2
class Solution:
def mySqrt(self, num: int) -> int:
x = num
while x*x > num:
x = (num // x + x) // 2 # 据说用整除可以提高效率
return x
https://leetcode.cn/problems/sqrtx/solutions/238682/jing-dian-ti-mu-yi-ti-duo-jie-si-chong-fang-fa-jie/