力扣(leetcode) 69. x 的平方根 (四种方法解决,总有一种是你会的~)

本文详细解析了LeetCode中关于求平方根的四种解题方法,包括直接调用math库、暴力循环、二分查找以及牛顿迭代法。通过实例代码解释每种方法的思路和实现细节,帮助读者深入理解并掌握这些算法。同时,文章提供了针对不同算法的优化建议和注意事项,适合编程初学者和进阶者阅读。
摘要由CSDN通过智能技术生成

题目在这: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

法四:

思路分析:
使用牛顿迭代法。。。。。着法子我也不会我先去学一下回来再更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值