69. x 的 平方根
easy
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
示例 1:
示例 2:
| 1
2
3
 | 输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
 | 
二分法
x 平方根的整数部分 ans 是满足 k^2^ ≤ x
的最大 kk 值
不多 bb
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
 | func mySqrt(x int) int {
	low, high := 0, x
	for low <= high {
		mid := low + (high-low)>>1
		if mid*mid < x {
			if (mid+1)*(mid+1) > x {
                // 找到最后一个小于x的mid
				return mid
			}
			low = mid + 1
		} else if mid*mid > x {
			high = mid - 1
		} else {
			return mid
		}
	}
	return -1
}
 | 

袖珍计算器算法


|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
 | func mySqrt(x int) int {
    if x == 0 {
        return 0
    }
    ans := int(math.Exp(0.5 * math.Log(float64(x))))
    if (ans + 1) * (ans + 1) <= x {
        return ans + 1
    }
    return ans
}
 |