69. x 的平方根

69. x 的 平方根

easy

给你一个非负整数 x ,计算并返回 x算术平方根

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

示例 1:

1
2
输入:x = 4
输出:2

示例 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
}

https://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20220304091028914.png

袖珍计算器算法

https://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20220304090854893.png

https://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20220304090908600.png

 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
}