题目描述
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
用if语句判断
a*a < x && (a+1)*(a+1) > x) || a*a == xji
我首先想到的就是二分法查找数字的方式,就是不断的数据对半以达到缩小范围的效果,直到找到该数
代码示例
func mySqrt(x int) int {
var a, y int
y = x / 2
for a = y; y > 0; {
if a*a > x {
y = y / 2
if y == 0 {
y = 1
}
a = a - y
} else if (a*a < x && (a+1)*(a+1) > x) || a*a == x {
return a
} else {
y = y / 2
if y == 0 {
y = 1
}
a = a + y
}
}
if x==1{
return 1
}
return a
}
我开始是没有这两个if判断的结果输出错误答案,我也不知道为什么,应该是没有之后y=0时退出循环导致的
加上就可以通过了