实现sqrt函数

LeetCode上的一道题目,要求实现sqrt函数,即开平方。

这道题目要求有逆向思维,当一条路行不通的时候,看看有没有变通的方法。再做这道题的时候要比较n * n与 x的大小,这里有明显的一点就是n * n可能会溢出,所以怎样在避免溢出的情况下实现判断。这时候可以反过来看,比较 n 与 x / n的大小,将乘法转换成除法来运算,就可以实现了,代码如下:

public class Solution {
    public int sqrt(int x) {
        if (x == 0) {
            return 0;
        }
        int l = 0, r = Integer.MAX_VALUE;
        while (l < r) {
            int mid = (l + r) / 2;
            int tmp = x / mid;
            if (mid == tmp) {
                return mid;
            } else if(mid > tmp) {
                r = mid;
            } else {
                l = mid + 1;
            }
        }
        return l - 1;
    }
}

 

posted @ 2015-04-14 20:55  Truezion  阅读(168)  评论(0)    收藏  举报