69.x 的平方根
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
题解1:二分查找法
/*
* @lc app=leetcode.cn id=69 lang=java
*
* [69] x 的平方根
*/
// @lc code=start
class Solution {
public int mySqrt(int x) {
// 二分查找法
// 时间复杂度:O(logx)
// 空间复杂度:O(1)
if (x == 0 || x == 1) {
return x;
}
int left = 1, right = x, ans = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if ((long) mid * mid <= x) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}
}
题解2:牛顿迭代法
/*
* @lc app=leetcode.cn id=69 lang=java
*
* [69] x 的平方根
*/
// @lc code=start
class Solution {
int s;
public int mySqrt(int x) {
// 牛顿迭代法
// 时间复杂度:O(logx)
// 空间复杂度:O(1)
s = x;
if (x == 0) {
return 0;
}
return (int) (sqrt(x));
}
private double sqrt(double x) {
double ans = (x + s / x) / 2;
if (ans == x) {
return ans;
} else {
return sqrt(ans);
}
}
}