Python LeetCode-69. x 的平方根(难度-简单)

1.题目描述

实现 int sqrt(int x)函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

2.分析

  • 第一个想法就是二分法,不断的去逼近我们想要的值
  • 网上找到一个比较神奇的牛顿迭代法,可以看下原理介绍牛顿迭代法原理

3.解决

  • 方法1:二分法逼近
class Solution(object):
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        left = 0
        right = x
        while left < right:
            mid = (left + right) // 2
            if x < mid ** 2: # 不断的让mid越来越靠近平方根
                right = mid
            else:
                left = mid + 1  # 左边指针加一,不断逼近想要的值
        if left > 1:
            return left - 1
        else:
            return left
  • 方法2:牛顿迭代法

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)

你可能感兴趣的:(Python LeetCode-69. x 的平方根(难度-简单))