【LeetCode】69. x 的平方根

161 阅读1分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题是一道求整数的平方根
    • 要求不能使用现有的数学方法

二、思路分析:

我们拿到本题,心里泛起嘀咕。九年义务教育白学了,又是眼会手不会的题。

难归难,我们也要迎头赶上,卷起来。

如何求平方根,首先在网上查找相关资料,常用的方法:牛顿迭代法

牛顿迭代法是一种快速求出实数域或复数域的近似值。

image.png

公式推理:

  • f(x) = x^2-C
  • 当f(x)等于零时,x^2-C=0,得到一个正实根
  • f(x)的导数2x
  • x−f(x)/(2x) 就是一个比 x 更接近的近似值
  • 则f(x)代入计算,得到x−(x2−a)/(2x),即(x+a/x)/2

根据推导出的公式,我们使用Python实现代码如下:

class Solution:
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x <= 1:
            return x
        r = x
        while r > x / r:
            r = (r + x / r) // 2
        return int(r)

三、总结:

我们提交代码,AC记录如下:

image.png 时间复杂度:O(logn),空间复杂度:O(1)

本题,我们使用最容易的牛顿迭代法去解决的。在官网的解析中,还可以使用二分法和数学方法解决。

以上是本期内容,欢迎大佬们点赞评论,下期见~~~