leetcode 69 Sqrt(x)
2016-08-09 19:58
337 查看
Implement
Compute and return the square root of x.
这道题目是写int类型开平方的方法,这题的解法有很多,可以通过遍历来实现,我的方法还是和之前的一道题目相似,用二分查找的方式,这道题目一定还有更简单的方法,先说一下我的算法:
class Solution {
public:
int mySqrt(int x)
{
if(x==0||x==1)
{
return x;
}
int low=1;
int high=x;
int result=low/2+high/2;
if(result>46340)
{
high=46341;
result=low/2+high/2;
}
while(result!=low)
{
if(result*result<x)
{
low=result;
}
else if(result*result>x)
{
high=result;
}
else
{
return result;
}
result=low/2+high/2;
if(low%2==1&&high%2==1)
{
result++;
}
}
return low;
}
};
有几点需要注意的是,之前说到为了避免超出int范围而拆分除法的方式,在这里需要判断,因为两个奇数和的一半用这种方法可能会比原有结果少1,二是较大的数字开平方,用一半来求的话再平方可能会超出int范围,需要进行判断。
int sqrt(int x).
Compute and return the square root of x.
这道题目是写int类型开平方的方法,这题的解法有很多,可以通过遍历来实现,我的方法还是和之前的一道题目相似,用二分查找的方式,这道题目一定还有更简单的方法,先说一下我的算法:
class Solution {
public:
int mySqrt(int x)
{
if(x==0||x==1)
{
return x;
}
int low=1;
int high=x;
int result=low/2+high/2;
if(result>46340)
{
high=46341;
result=low/2+high/2;
}
while(result!=low)
{
if(result*result<x)
{
low=result;
}
else if(result*result>x)
{
high=result;
}
else
{
return result;
}
result=low/2+high/2;
if(low%2==1&&high%2==1)
{
result++;
}
}
return low;
}
};
有几点需要注意的是,之前说到为了避免超出int范围而拆分除法的方式,在这里需要判断,因为两个奇数和的一半用这种方法可能会比原有结果少1,二是较大的数字开平方,用一半来求的话再平方可能会超出int范围,需要进行判断。
相关文章推荐
- leetcode 69. Sqrt(x)
- LeetCode 69: Sqrt(x)
- Leetcode 69 sqrt(x)
- LeetCode 69 Sqrt(x)
- LeetCode-69. Sqrt(x)
- Leetcode 69 Sqrt(x) 二分查找(二分答案)
- leetcode69---Sqrt(x)(求x的平方根)
- leetcode 69. Sqrt(x)
- leetcode 69 implement the sqrt(x)
- LeetCode 69. Sqrt(x)
- 【leetcode】69. Sqrt(x)【java】
- LeetCode-69. Sqrt(x)
- [Leetcode]69.Sqrt(x)
- LeetCode 69. Sqrt(x)
- Leetcode-69.Sqrt(x)
- 【小熊刷题】sqrt(x) <Leetcode 69 Java>
- [LeetCode]69. Sqrt(x)
- [勇者闯LeetCode] 69. Sqrt(x)
- leetcode-69 Sqrt(x)
- LeetCode69 Sqrt(x)**