Leetcode367. 有效的完全平方数
题目:
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
题解:
此题和69题类似:详见69题解答 leetcode69.x的平方根
方案一:二分法
方案二:牛顿法
scala代码:
/**
* 二分法
*
* @param num
* @return
*/
def isPerfectSquare(num: Int): Boolean = {
var left = 2
var right = num / 2
var flag = false
while (left <= right && !flag) {
val x = left + (right - left) / 2
if (x * x == num) {
flag = true
} else if (x * x > num) {
right = x - 1
} else {
left = x + 1
}
}
flag
}
/**
* 牛顿法
*
* @param num
* @return
*/
def isPerfectSquare2(num: Int): Boolean = {
var a = 0l
if (num < 2) {
true
} else {
a = num.toLong
while (a * a > num) {
a = (a + num / a) / 2
}
a * a == num
}
}
java代码:
public static boolean isPerfectSquare(int num) {
if (num < 2) return false;
int a = num;
while (a * a > num) {
a = (a + num / a) / 2;
}
return a * a == num;
}