Leetcode 69. Sqrt(x) 开根号 解题报告

1 解题思想

这道题就是要求实现一个开根号的函数方法,我想在这里说的有:
1、二分法逼近,也就是我给出的做法,因为开根号给出的结果一定是在1到它本身之间的一个范围,所以我们初始让min=1,max=本身,每次求MID去逼近。
2、牛顿迭代法:这个比较复杂,可以网上看看一看,这里给一个集合:http://www.docin.com/p-571369782.html,这里除了牛顿迭代法,还有更多其他的算法

但是这题,有一个假设,就是输入的数开根号后也是整数,所以选择1方法最容易了

2 原题

Implement int sqrt(int x).

Compute and return the square root of x.

3 AC解

public class Solution {
    public int mySqrt(int x) {
        long min=0,max=x,mid=0,tmp,xs=x;
        while(min<max){
            mid=(max-min)/2+min;
            tmp=mid*mid;
            if(tmp==xs)
                break;
            if(tmp>=xs)
                max=mid-1;
            else min=mid+1;
        }
        mid=(max-min)/2+min;
        if(mid*mid>xs)
            mid--;
        return (int)mid;

    }
}

你可能感兴趣的:(LeetCode,迭代,sqrt,开根号)