题目描述
给你一个非负整数 x
,计算并返回 x
的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
**注意:**不允许使用任何内置指数函数和算符,例如 pow(x, 0.5)
或者 x ** 0.5
。
解法一
-
暴力解法
class Solution: def mySqrt(self, x: int) -> int: # 从1到x遍历 for i in range(0, x + 1): if i * i <= x < (i + 1) * (i + 1): return i
-
时间复杂度
O ( n ) O(n) O(n) -
空间复杂度
O ( n ) O(n) O(n)
解法二
-
二分法
class Solution: def mySqrt(self, x: int) -> int: left = 0 right = x # 使用二分法进行查找 while left<=right: mid = (left+right)//2 if mid*mid <= x < (mid+1) * (mid+1): return mid elif mid*mid >x: right = mid-1 elif (mid+1)*(mid+1) <= x: left = mid+1 return left
-
时间复杂度
- 二分法
O ( l o g 2 ( n ) ) O(log_2(n)) O(log2(n))
-
空间复杂度
O ( 1 ) O(1) O(1)
-