LeetCode第69题-x的平方根-python实现-图解思路与手撕代码
一、题目描述
二、解题思路与代码实现
1.解题思路
二分查找,我们求的数肯定在0-x之间,每次取中间值进行平方操作与x进行比较,这里使用快速二分函数bisect_left(nums, x)。
数学法,对于结果res和目标值x,(res+x/res)/2比res更接近x,我们不断对res进行迭代,直到平方值小于x即可。
2.代码实现
二分查找代码如下(示例):
class Solution:
def mySqrt(self, x: int) -> int:
def square(n:int):
return n*n
res=bisect_left(range(x+1),x,key=square)
if res*res>x:res-=1
return res
数学法代码如下(示例):
class Solution:
def mySqrt(self, x: int) -> int:
res=x+1
while res*res>x:res=(res+x//res)//2
return math.floor(res)
总结
这两种方法都具有一定的代表性,前者对python内置的二分查找函数进行使用,后者是对解题提供了一种新的思路。