实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
这道题在leetcode中属于简单题,但是此题需要注意一些细节问题。
1、int类型数字乘积越界问题:这个问题非常重要
int类型的范围为-231 到 231-1
两个int数字加法和乘积很容易越界,导致加法/乘积结果不准确
下面为代码,可以将加法变减法,乘法变除法处理,来避免数值越界问题:
class Solution {
public int mySqrt(int x) {
int min = 1;
int max = x;
if(x == 0)
return 0;
while(min<max){
int mid = (max-min)/2 + min;
if(x/mid < mid)
max = mid - 1;
else if(x/mid > mid)
min = mid + 1;
else
return mid;
}
return x/min < min ? min-1 : min;
}
}
提交结果:
结果
网友评论