91 - 有效的完全平方数
题目
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16 输出:True
示例 2:
输入:14 输出:False
解答
感觉又是数学题。。
只能想到从小到大循环一个个试,感觉这么做会超时。
牛顿迭代法
作者:Gerry_666
链接:https://leetcode-cn.com/problems/valid-perfect-square/solution/niu-dun-die-dai-fa-by-gerry_666/

var isPerfectSquare = function (num) {
if (num === 1) {
return true
}
let r = num
while (r * r > num) {
r = Math.floor((r + Math.floor(num / r)) / 2)
}
if (r * r === num) {
return true
} else {
return false
}
};
Runtime: 56 ms, faster than 58.80% of JavaScript online submissions for Valid Perfect Square.
Memory Usage: 33.7 MB, less than 75.00% of JavaScript online submissions for Valid Perfect Square.
func isPerfectSquare(num int) bool {
if num == 1 {
return true
}
r := num
for r*r > num {
r = (r + num/r) / 2
}
if r*r == num {
return true
} else {
return false
}
}
Runtime: 0 ms, faster than 100.00% of Go online submissions for Valid Perfect Square.
Memory Usage: 1.9 MB, less than 50.00% of Go online submissions for Valid Perfect Square.
二分法
看了题解意识到,还能用两分法😂
作者:gpe3DBjDS1
var isPerfectSquare = function (num) {
if (num === 1) {
return true
}
let left = 1, right = num
while (left < right) {
let mid = (left + right) >>> 1
if (mid * mid < num) {
left = mid + 1
} else {
right = mid
}
}
if (right * right === num) {
return true
} else {
return false
}
};
Runtime: 56 ms, faster than 58.80% of JavaScript online submissions for Valid Perfect Square.
Memory Usage: 33.8 MB, less than 75.00% of JavaScript online submissions for Valid Perfect Square.
func isPerfectSquare(num int) bool {
if num == 1 {
return true
}
left, right := 1, num
for left < right {
mid := (left + right) >> 1
if mid*mid < num {
left = mid + 1
} else {
right = mid
}
}
if right*right == num {
return true
} else {
return false
}
}
Runtime: 0 ms, faster than 100.00% of Go online submissions for Valid Perfect Square.
Memory Usage: 1.9 MB, less than 100.00% of Go online submissions for Valid Perfect Square.
完全平方数
1 + 3 + 5 + ... + (2n - 1) = n ^ 2
var isPerfectSquare = function (num) {
if (num === 1) {
return true;
}
let i = 1
while (num > 0) {
num -= i
i += 2
}
return num === 0
};
Runtime: 68 ms, faster than 26.93% of JavaScript online submissions for Valid Perfect Square.
Memory Usage: 34.5 MB, less than 50.00% of JavaScript online submissions for Valid Perfect Square.
func isPerfectSquare(num int) bool {
if num == 1 {
return true
}
i := 1
for num > 0 {
num -= i
i += 2
}
return num == 0
}
Runtime: 0 ms, faster than 100.00% of Go online submissions for Valid Perfect Square.
Memory Usage: 1.9 MB, less than 50.00% of Go online submissions for Valid Perfect Square.
Last updated
Was this helpful?