2023.5.23
题目描述:
麻雀虽小,五脏俱全。这道简单题解法还不少,个人想出的是时间复杂度为n的解法,看了题解还有一种二分法解法。 先掌握这两种吧。 直接上代码:
方法一:暴力解
class Solution {
public:
int mySqrt(int x)
{
long ans = 0; //存储符合条件的值
for(long i =0; i*i <= x; i++)
{
ans = i;
}
return (int)ans; //取整
}
};
要注意的是有些变量为了防止溢出,使用long来定义。
方法二:二分法
class Solution {
public:
int mySqrt(int x)
{
int ans = 0;
int i = 0;
int j = x;
while(i <= j)
{
long k = (i+j)/2; //这里为了防止溢出可以使用另一种写法:j + (i - j)/2
if(k*k > x)
{
j = k - 1;
}
else if(k*k <= x)
{
i = k + 1;
ans = k;
}
}
return ans;
}
};
还有一种方法好像叫牛顿法,有时间再来更新。