码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 69. Sqrt(x)

时间:2018-10-20 23:53:22      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:output   ++   NPU   思想   想去   turned   个数   数字   ati   

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

Example 1:

Input: 4
Output: 2

Example 2:

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since 
             the decimal part is truncated, 2 is returned.


题意:开方
这里肯定是不使用Math库的前提下,
我们可以利用二分的思想去开方,开方反过来就是平方,Integer.MAX_VALUE 开方是46340,也就是最大的解,因为存在越界的情况
这个数字需要我们提前算出来。之后只要二分去找,mid*mid <= target , (mid+1)*(mid+1) > target 就行了
class Solution {
    public int mySqrt(int x) {
        int l = 0;
        int r = 46340;
        if (r*r < x)
            return r;
        if (x == 1 || x == 0)
            return x;
        while (r - l > 5) {
            int mid = (l + r) / 2;
            if (mid * mid < x) {
                l = mid;
            }
            else if (mid * mid > x) {
                r = mid;
            }
            else
                return mid;
        }
        for (int i = l; i <= r; i++) {
            if (i*i == x)
                return i;
            if (i*i < x && (i+1)*(i+1) > x)
                return i;
        }
        return 0;
    }
}

 

[LeetCode] 69. Sqrt(x)

标签:output   ++   NPU   思想   想去   turned   个数   数字   ati   

原文地址:https://www.cnblogs.com/Moriarty-cx/p/9823313.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!