题目在这:https://leetcode-cn.com/problems/sqrtx/
题目分析:
题目还是挺好理解的,就是给你一个数,问你它是由谁平方得来的。
比如给你4,2的平方等于4。所以返回2。
而8这种,在2的平方和3的平方之间,则取小的哪一个,返回2。
法一:
思路分析 :
如果仅仅是为了完成这题。可以直接投机取巧~
import math
return int(math.sqrt(x))
法二:
思路分析:
直接暴力循环找到合适的答案。
开头说到的8的答案为2的那种情况需要单独列出来。
当我们遍历到 某一个数的平方大于我们要找的数时。返回该数减一。
比如 8这个数。遍历到2的时候是4<8,遍历到3的时候是9>8。
所以返回2 。
x = 4
for i in range(1,99999):
if i * i == x:
return i
if i * i > x:
return i-1
法三:
思路分析:
使用二分法解决这道题。
有一个需要注意的点就是,当指针left和right相邻的时候,即left在right左边一个时,说明mid在中间已经取不到了,是小数。这时直接返回left的值就行了。
还有一点就是如果给的数是 0 和 1这两种情况要提前排除。
l = 1
r = x
if x == 0:
print(0)
if x == 1:
print(1)
while l<r:
mid = (l+r) // 2
if l+1 == r:
print(l)
break
elif mid ** 2 == x:
print(mid)
break
elif mid ** 2 >x:
r = mid
elif mid ** 2 <x:
l = mid
拿到leetcode跑的时候,记得吧print换成return然后去掉break就行了。上 面这段代码是在pycharm上测试用的,可以方便大家学习理解代码。
关于二分法,大家可以看我另一篇二分法的详解文章,保证让你很清晰。https://blog.csdn.net/qq_38737428/article/details/117903312?spm=1001.2014.3001.5501
法四:
思路分析:
使用牛顿迭代法。。。。。着法子我也不会我先去学一下回来再更