x的平方根(Python and C++解法)

题目:

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1: 输入: 4  输出: 2

示例 2:输入: 8  输出: 2

说明: 8 的平方根是 2.82842...,  由于返回类型是整数,小数部分将被舍去。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx

思路:

  采用二分查找的方法,逐渐寻找接近结果的值。

Python解法:

 1 class Solution:
 2     def mySqrt(self, x: int):
 3         if x == 0 or x == 1:
 4             return x
 5         left = 0
 6         right = x//2+1 
 7         while left <= right:
 8             mid = (left + right) // 2
 9             if mid * mid <= x and (mid+1) * (mid+1) > x:  # 右边不能为=
10                 return mid
11             elif x < mid * mid:
12                 right = mid - 1
13             elif x > mid * mid:
14                 left = mid + 1

C++解法:

 1 class Solution {
 2 public:
 3     int mySqrt(int x) {
 4         if (x == 0 || x == 1)
 5             return x;
 6         long left = 0;
 7         long right = x / 2 + 1;  // 对于一个非负数n,它的平方根不会大于n/2+1
 8         while (left <= right) {
 9             long mid = left + (right - left) / 2;  // 防止溢出
10             if (x / mid >= mid && x / (mid + 1) < (mid + 1))  // 防止溢出
11                 return mid;
12             else if (x / mid < mid)
13                 right = mid - 1;
14             else if (x / mid > mid)
15                 left = mid + 1;
16         }
17     }
18 };
posted @ 2020-06-18 22:14  孔子?孟子?小柱子!  阅读(270)  评论(0编辑  收藏  举报