题目地址:69. x 的平方根
看到这个题:
class Solution {
public int mySqrt(int x) {
if (x == 1)
return 1;
for (int i = 1; i < x; i++) {
if(i*i <= x && (i+1)*(i+1) > x)
return i;
}
return 0;
}
}
结果:
差两个,大数字不行……
class Solution {
public int mySqrt(int x) {
if (x == 0)
return 0;
if (x < 4)
return 1;
long chs = 0;
for (long i = 2; i <= (x/2)+1; i++) {
long tmp = i*i;
//一种情形为正好存在平方根
if(tmp == x){
chs = i;
break;
}
//一种情形为不是正好是平方根或者平方后越界
if(tmp > x || tmp >= Integer.MAX_VALUE){
chs = i-1;
break;
}
}
//注意转换类型
return (int)chs;
}
}
结果:
太低了……
学习一下牛顿法,直接用结论:
class Solution {
public int mySqrt(int x) {
if (x < 2)
return x;
double x0 = x;
double x1 = (x0 + x / x0) / 2.0;
while (Math.abs(x0 - x1) >= 1) {
x0 = x1;
x1 = (x0 + x / x0) / 2.0;
}
return (int)x1;
}
}
结果:
最后一个方法来自:https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode/