这是第10篇算法,力扣链接
给你一个非负整数
x
,计算并返回x
的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如
pow(x, 0.5)
或者x ** 0.5
。
不管哪个方法都很像有效的完全平方数,但是有效的完全平方数只要yes or no,这里是要具体的值,注意要记录下来,而且要防止被篡改。
方法一:大力出奇迹
这个思路并不难想,从1开始找,找到则返回。
func mySqrt(x int) int {
result := 0
for i := 1; i*i <= x; i++ {
if i*i == x {
result = i
break
} else if i*i < x {
result = i
}
}
return result
}
方法二:二分法
从两端往中间找,根据mid的值判断平方根的位置。
func mySqrt(x int) int {
left, right, result := 0, x, 0
for left <= right {
mid := (left + right) / 2
square := mid * mid
if square == x {
return mid
} else if square < x {
result = mid
left = mid + 1
} else {
right = mid - 1
}
}
return result
}