classSolution{ publicintmySqrt(int x){ int left = 1; int right = x / 2; while (left <= right) { int mid = (left + right) / 2; int result = x / mid; if (result == mid) { return mid; } if (result < mid) { right = mid - 1; } else { left = mid + 1; } } return x / left < left ? left - 1 : left; } }
Python实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
class Solution(object): def mySqrt(self, x): """ :type x: int :rtype: int """ l = 1 r = x while l <= r: mid = int((l + r) / 2) if mid * mid == x: return mid elif mid * mid < x: l = mid + 1 elif mid * mid > x: r = mid - 1 if l * l > x: return l - 1 return l