每天学习一点算法 2026/04/12
题目:x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
作者:LeetCode
链接:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xwrzwc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本来是没思路的,看到了官方题解的二分查找的题解,就瞬间知道了该怎么做了,就是在 1 ~ x 的范围内找平方等于x的数嘛,要注意的是小数只保留整数部分,所以我们需要找到平方等于 x 或者 平方小于 x 最靠后的数。
typescript
function mySqrt(x: number): number {
if (x <= 1) return x
let left = 1, right = x / 2 // 目标值肯定是小于等于 2 / x
let res = 1
while (left <= right) {
const mid = Math.floor((left + right) / 2) // 取偏左的值
if (mid * mid === x) {
return mid // 找到平方根直接返回
} else if (mid * mid > x) {
right = mid - 1 // 目标值在左侧
} else {
left = mid + 1 // mid小于目标值
res = mid // 记录当前的值,可能是最靠后的
}
}
return res
};
题目来源:力扣(LeetCode)