Implement int sqrt(int x).
Compute and return the square root of x.
题意:计算整数x的平方根。
这里我采用的方法是二分法,因为int能表示的最大整数为2^31-1=2147483647,开根号为46340。所以从1-46340区间进行二分查找,这里需要注意的是查找时,如果判断medium*medium<x为true,需要再进一步判断(medium+1)*(medium+1)>x是否成立,如果成立,则应该立即返回medium。这样做的原因是我们求平方根时返回的应该是小于等于x平方根的最大整数。
class Solution {
public:
int sqrt(int x){
if(x==0) return 0;
int begin=1,end=46340;
int medium=(begin+end)>>1;
int square=medium*medium;
while(square!=x&&begin<end)
{
if(square<x)
{
if((medium+1)*(medium+1)>x)
return medium;
else
begin=medium+1;
}
else
{
end=medium-1;
}
medium=(begin+end)>>1;
square=medium*medium;
}
if(square==x)
return medium;
else
return begin;
}
};

本文介绍了一种使用二分查找法来计算整数平方根的方法,适用于整数范围为[-2^31, 2^31-1]。通过在1到46340区间内查找,确保返回的是小于等于输入整数的最大整数平方根。
3101

被折叠的 条评论
为什么被折叠?



