leetcode:(69) Sqrt(x)(java)
阿新 • • 發佈:2018-12-21
題目描述:
mplement 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.
解題思路:
x的平方根值應該在區間[1,x],而且sqrt=x/sqrt,所以用二分查詢sqrt。根據題意有,若x=8,則輸出應該是3,迴圈條件是l<=h,當跳出迴圈時,h比l小1,所以返回值應該是h。具體思路及程式碼如下:
package Leetcode_Github; public class BinarySearch_SqrtX_69_1113 { public int MySqrt(int x) { //判斷輸入是否合法 if (x <= 1) { return x; } int l = 1; int h = x; while (l <= h) { int mid = l + (h - l) / 2; int sqrt = x / mid; if (mid == sqrt) { return mid; } else if (mid > sqrt) { h = mid - 1; } else { l = mid + 1; } } return h; } }