69.Sqrt(x)
Given a non-negative integer x, return the square root of x rounded down to the nearest integer . The returned integer should be non-negative as well.
You must not use any built-in exponent function or operator.
Example 1:
1 2 3 Input: x = 4 Output: 2 Explanation: The square root of 4 is 2, so we return 2.
Example 2:
1 2 3 Input: x = 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since we round it down to the nearest integer, 2 is returned.
个人解答:
1 2 3 4 5 int mySqrt (int x) { long long i = 0 ; while (i*i <= x)i++; return i-1 ; }
二分查找:
1 2 3 4 5 6 7 8 9 10 11 12 13 int mySqrt (int x) { int l = 0 , r = x, ans = -1 ; while (l <= r) { int mid = l + (r - l) / 2 ; if ((long long )mid * mid <= x) { ans = mid; l = mid + 1 ; } else { r = mid - 1 ; } } return ans; }
牛顿迭代:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int mySqrt (int x) { if (x == 0 ) { return 0 ; } double C = x, x0 = x; while (true ) { double xi = 0.5 * (x0 + C / x0); if (fabs (x0 - xi) < 1e-7 ) { break ; } x0 = xi; } return int (x0); }