Problem 69

Sqrt(x)

Posted by Ruizhi Ma on June 30, 2019

问题描述

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.

解决思路

思路就是a^2中,a一定小于a^2/2 - 1,然后设置头指针,和尾指针,不断的用二分法来找到a

代码

package leetcode;

public class Sqrt {
    public int mySqrt(int x) {
        if (x <= 0) return 0;

        long start = 1;
        long end = x/2 + 1;
        long mid = 1;

        while (start <= end){
            mid = (start + end)  / 2;
            long temp = mid * mid;

            if (temp  == x) return (int)mid;
            else if (temp < x) start = mid + 1;
            else if (temp > x)end = mid - 1;
        }

        return (int)end;
    }
}