LeetCode 69. Sqrt(x)

简介: 实现int sqrt(int x).计算并返回x的平方根,其中x保证为非负整数.由于返回类型是整数,因此将截断十进制数字,并仅返回结果的整数部分.

v2-0df8e1b68081b5a240df38631e2b2f7d_1440w.jpg


Description



Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.


Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.


Example 1:

Input: 4

Output: 2


Example 2:

Input: 8

Output: 2


Explanation: The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.


描述



实现int sqrt(int x).

计算并返回x的平方根,其中x保证为非负整数.

由于返回类型是整数,因此将截断十进制数字,并仅返回结果的整数部分.


思路



  • 对一个数实现开方,并返回其整数部分
  • 此题目使用二分法.
  • 我们初始化left,right,middle = 0,x,x>>1(位运算,等同于x/2,位运算速度更快).
  • 如果middle*middle < x,说明sqrt(x)在[middle,right]之间,我们更新left==middle,middle == left + ((right - left)>>1).
  • 如果middle*middle > x,说明sqrt(x)在[left,middle]之间,我们更新right == millde,middle = left + ((right - left)>>1).
  • 结束条件:当middlemiddle <= x <(middle+1)(midddle+1)时,返回middle.


class Solution:
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        # 如果输入是1,则直接返回1
        if x == 1:
            return 1
        # 左边界,右边界,中间值,注意位运算9>>1=4,为整型
        left, right, middle = 0, x, x >> 1
        while True:
            # 对中间的值求平方
            multi = middle*middle
            # 如果平方小于x,说明sqrt(x)在[middle,right]之间
            if multi < x:
                left = middle
            # 如果平方大于x,说明sqrt(x)在[left,middle]之间
            elif multi > x:
                right = middle
            # 求middle+1的平方
            intmultib = (middle+1)*(middle+1)
            # 如果x落在了[middle,middle+1)之间,结束循环,返回middle
            if multi <= x < intmultib:
                return middle
            middle = left+((right-left) >> 1)
if __name__ == "__main__":
    so = Solution()
    res = so.mySqrt(190983754751)
    print(res)


源代码文件在这里.

目录
相关文章
|
Python
LeetCode 69. Sqrt(x)
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
124 0
|
Java 测试技术 C++
LeetCode 69. Sqrt(x)--(数组)--二分法查找 --简单
Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a non-negative integer. Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
128 0
LeetCode 69. Sqrt(x)--(数组)--二分法查找 --简单
☆打卡算法☆LeetCode 69、Sqrt(x) 算法解析
“给定一个非负整数,计算并返回x的算术平方根。”
[LeetCode]--69. Sqrt(x)
Implement int sqrt(int x). Compute and return the square root of x. 我采用的是二分法。每次折中求平方,如果大了就把中值赋给大的,如果小了就把中值赋给小的。 public int mySqrt(int x) { long start = 1, end = x; while
856 0
LeetCode 69 Sqrt(x)
题目描述: Implement int sqrt(int x). Compute and return the square root of x. 题目翻译:输入x,返回sqrt(x); C语言版: int mySqrt(int x) { int t...
882 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
55 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2