Keshawn_lu's Blog

Leetcode 69. x 的平方根

字数统计: 267阅读时长: 1 min
2020/05/09 Share

题目简介:

实现 int sqrt(int x) 函数。

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

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

示例 1:

1
2
输入: 4
输出: 2

示例 2:

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

思路:使用二分查找,若循环时,x / mid = mid(防止溢出,即x = mid * mid)或 x / mid > mid && x / (mid + 1) < mid + 1(代表平方根为小数,此时的mid为舍去小数的剩余部分),则返回mid。否则根据x / mid 和 mid 的比较来更改left或right的值。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
int mySqrt(int x) {

if(x == 1 || x == 0)
return x;

int left = 0;
int right = x;

while(left < right){

int mid = (left + right) / 2;

if(x / mid == mid || (x / mid > mid && x / (mid + 1) < (mid + 1)))
return mid;
else if(x / mid > mid) //mid小于sqrt(x)
left = mid;
else if(x / mid < mid) //mid大于sqrt(x)
right = mid;
}

return -1;

}
};
CATALOG
  1. 1. 题目简介: