这是第九篇算法,力扣链接
给你一个正整数
num
。如果num
是一个完全平方数,则返回true
,否则返回false
。完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
不能使用任何内置的库函数,如
sqrt
。
方法一:暴力解题
这个想法并不难想,从1到num之间遍历所有数,当然,基本在num/2之前那个数就找到了
func isPerfectSquare(num int) bool {
for x := 1; x*x <= num; x++ {
if x*x == num {
return true
}
}
return false
}
方法二:二分法
二分法的解法一直很神奇,从两边各选一个指针往中间靠拢,中间的mid即为预设的x,根据mid*mid的大小来更改左右指针的位置,找不到符合mid返回false。
func isPerfectSquare(num int) bool {
left, right := 0, num
for left <= right {
mid := (left + right) / 2
square := mid * mid
if square == num {
return true
} else if square < num {
left = mid + 1
} else {
right = mid - 1
}
}
return false
}