- 题目描述
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- 思路
1、二分法,先从二分之一开始,若平方大于x,则向下取二分之一,若小于x,则向上取二分之一
2、0和1的平方根是他们本身
-代码
func mySqrt(x int) int {
if x == 0 || x == 1 {
return x
}
return int(t(x,0,float64(x)))
}
func t(x int, low float64, height float64) float64 {
tmp := float64(height+low)/2
if int(tmp * tmp) == x {
return tmp
}
if tmp * tmp > float64(x) {
return t(x,low,tmp)
}
return t(x, tmp, height)
}
- 测试用例
package main
import (
"fmt"
)
func mySqrt(x int) int {
if x == 0 || x == 1 {
return x
}
return int(t(x,0,float64(x)))
}
func t(x int, low float64, height float64) float64 {
tmp := float64(height+low)/2
if int(tmp * tmp) == x {
return tmp
}
if tmp * tmp > float64(x) {
return t(x,low,tmp)
}
return t(x, tmp, height)
}
func main() {
res := mySqrt(2147395600)
fmt.Println(res)
}