Easy
6231151FavoriteShare
Implement int sqrt(int x).
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
Input: 4
Output: 2
Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since
the decimal part is truncated, 2 is returned.
注意int类型的表示范围可能导致溢出
C++:
遍历法:
/*
@Date : 2019-01-27 14:40:25
@Author : 酸饺子 (changzheng300@foxmail.com)
@Link : https://github.com/SourDumplings
@Version : $Id$
*/
/*
https://leetcode.com/problems/sqrtx/
*/
class Solution
{
public:
int mySqrt(int x)
{
int ret;
for (int i = 0; i <= x; ++i)
{
if (i * i <= x && ((long long)(i + 1) * (long long)(i + 1)) > x)
{
ret = i;
break;
}
}
return ret;
}
};
直接调用库函数:
/*
@Date : 2019-01-27 14:40:25
@Author : 酸饺子 (changzheng300@foxmail.com)
@Link : https://github.com/SourDumplings
@Version : $Id$
*/
/*
https://leetcode.com/problems/sqrtx/
*/
class Solution
{
public:
int mySqrt(int x)
{
return sqrt(x);
}
};
二分法:
/*
@Date : 2019-01-27 14:40:25
@Author : 酸饺子 (changzheng300@foxmail.com)
@Link : https://github.com/SourDumplings
@Version : $Id$
*/
/*
https://leetcode.com/problems/sqrtx/
*/
class Solution
{
public:
int mySqrt(int x)
{
if (x == 0)
{
return 0;
}
long long lo = 1, hi = x;
int ret;
while (true)
{
long long mi = (lo + hi) >> 1;
if (mi * mi <= x)
{
if ((mi + 1) * (mi + 1) > x)
{
ret = mi;
break;
}
else
lo = mi;
}
else
hi = mi;
}
return ret;
}
};
Java:
直接调用库函数:
/**
* @Date : 2019-01-27 14:53:28
* @Author : 酸饺子 (changzheng300@foxmail.com)
* @Link : https://github.com/SourDumplings
* @Version : $Id$
*
* https://leetcode.com/problems/sqrtx/
*/
class Solution
{
public int mySqrt(int x)
{
return (int)(Math.sqrt(x));
}
}