LeetCode 题解(167): Sqrt(x)

题目:

Implement int sqrt(int x).

Compute and return the square root of x.

题解:

在 [0, x / 2 + 1] 范围内二分查找。

C++版:

class Solution {
public:
    int mySqrt(int x) {
      int i = 0;
      int j = x / 2 + 1;
      while (i <= j) {
          long mid = (i + j) / 2;
          long sq = mid * mid;
          if (sq == x) return mid;
          else if ( sq < x) i = mid + 1;
          else j = mid - 1;
      }
      return j;
    }
};

Java版:

public class Solution {
    public int mySqrt(int x) {
        int i = 0, j = x / 2 + 1;
        while(i <= j) {
            long mid = (i + j) / 2;
            long sq = mid * mid;
            if(sq == x) return (int)mid;
            else if(sq > x) j = (int)(mid) - 1;
            else i = (int)mid + 1;
        }
        return j;
    }
}

Python版:

class Solution:
    # @param {integer} x
    # @return {integer}
    def mySqrt(self, x):
        if x < 0:
            return None
        if x == 0 or x == 1:
            return x
        y, z = x / 2 + 1, 0
        while z <= y:
            mid = (y + z) / 2
            if mid * mid == x:
                return mid
            elif mid * mid > x:
                y = mid - 1
            else:
                z = mid + 1
        return y


你可能感兴趣的:(Algorithm,LeetCode,面试题)