题目
给定一个非负整数 x ,计算并返回 x 的平方根,即实现 int sqrt(int x) 函数。
8的算术平方根记作:√8,化简:√8=2√2,用近似值表示:√8≈2.
正数的平方根有两个,只输出其中的正数平方根。
8的根号为2根号下2,8可以写为2×4,然后分别根号,根号4等于2,所以答案是2根号下2。
如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。
一个正数a的平方根为±√a 8的平方根是:±√8 ∵±√8=±2√2 ∴8的平方根是:±
示例 1:输入: x = 4 输出: 2
示例 2:输入: x = 8 输出: 2
解释: 8 的平方根是 2.82842...,由于小数部分将被舍去,所以返回 2
提示:0 <= x <= 231 - 1
注意:本题与主站 69 题相同:
解题思路分析
√8=√(2²×2)=2√2 一般地,若一个非负数x的平方等于a,即x2=a,则这个数x叫做a的算术平方根,简称算术根。正数的平方根有两个,它们为相反数,其中正的平方根,就是这个数的算术平方根。实数a的算术平。
1、内置函数;时间复杂度O(log(n)),空间复杂度O(1)
8的算术平方根怎么算,func mySqrt(x int) int { result := int(math.Sqrt(float64(x))) return result}
2、内置函数;时间复杂度O(log(n)),空间复杂度O(1)
3、牛顿迭代法;时间复杂度O(log(n)),空间复杂度O(1)
func mySqrt(x int) int { result := x for result*result > x {result = (result + x/result) / 2 } return result}
4、二分查找;时间复杂度O(log(n)),空间复杂度O(1)
func mySqrt(x int) int { left := 1 right := x for left <= right {mid := (left + right) / 2if mid == x/mid { return mid} else if mid < x/mid { left = mid + 1} else { right = mid - 1} } if left*left <= x {return left } else {return left - 1 }}
8=2×4,4=2²,所以8的平方根等于正负2倍根号2。平方根表示为〔±√ ̄〕,其中属于非负数的平方根称之为算术平方根。一个正数有两个实平方根,它们互为相反数,负数有两个共轭的纯虚平方根。开方,指求一个。
5、遍历;时间复杂度O(n),空间复杂度O(1)
func mySqrt(x int) int { result := 0 for i := 1; i <= x/i; i++ {if i*i == x { return i}result = i } return result}
没有算数平方根,只有算术平方根。8的平方根是正负二倍根号二,8 的算术平方根是二倍根号二
总结
Easy题目,题目同leetcode 69.x的平方根