【LeetCode】Sqrt(x)

来源:互联网 发布:淘宝男装销量店铺排行 编辑:程序博客网 时间:2024/06/06 08:59
Sqrt(x) 
Total Accepted: 11664 Total Submissions: 54437 My Submissions
Implement int sqrt(int x).
Compute and return the square root of x.
解法1:
调用Java API,Math.sqrt()。这个方法的底层实现是native。

Java AC

public class Solution {    public int sqrt(int x) {        return (int)Math.sqrt(x);    }}
解法2:

二分搜索,无限逼近。注意2点:
1)、搜索0到x/2+1即可。
2)、两数相乘有可能越界,声明值为long型。

Java AC

public class Solution {    public int sqrt(int x) {        long low = 0;        long high = x / 2 + 1;        while(low <= high){        long mid = (low + high) >> 1;        long tempNum = mid * mid;            if(tempNum == x){                return (int)mid;            }            if(tempNum > x){                high = mid - 1;            }else{                low = mid + 1;            }        }        return (int)high;    }}
解法3:

牛顿迭代法求开方

假设f(x)是关于x的函数,如图所示:



在Xn处的斜率为:

求得:


根据

得到递推公式:


Java AC

public class Solution {    public int sqrt(int x) {        double result = x;        while(Math.abs(result * result - x) > 0.0001){            result = (result + x / result) / 2;        }        return (int)result;    }}


0 0