leetcode 算法题507 (简单130) 完美数
- 题目介绍
对于一个 正整数,
如果它和除了它自身以外的所有正因子之和相等,
我们称它为“完美数”。
给定一个 整数 n,
如果他是完美数,
返回 True,
否则返回 False
- 示例
输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14
- 提示
输入的数字 n 不会超过 100,000,000. (1e8)
- 解法一
/**
* @param {number} num
* @return {boolean}
*/
var checkPerfectNumber = function(num) {
if(num < 4) {
return false;
}
let i = 2; sum = 1;
while(i < num) {
if(num % i === 0) {
sum += i;
}
i++;
}
return num === sum;
};
执行用时 : 5140 ms, 在所有 JavaScript 提交中击败了20.88%的用户
内存消耗 : 34.7 MB, 在所有 JavaScript 提交中击败了21.43%的用户
- 解法二
/**
* @param {number} num
* @return {boolean}
*/
var checkPerfectNumber = function(num) {
if(num < 4) {
return false;
}
let i = 2; sum = 1;
while(i <= Math.floor(Math.sqrt(num))) {
if(num % i === 0) {
if(i * i === num) {
sum += i;
} else {
sum += (i + num / i);
}
}
i++;
}
return num === sum;
};
执行用时 : 84 ms, 在所有 JavaScript 提交中击败了82.97%的用户
内存消耗 : 35.1 MB, 在所有 JavaScript 提交中击败了17.86%的用户
- 解法三
/**
* @param {number} num
* @return {boolean}
*/
var checkPerfectNumber = function(num) {
if(num < 4) {
return false;
}
let i = 2; sum = 1;
while(i <= num / i) {
if(num % i === 0) {
if(i * i === num) {
sum += i;
} else {
sum += (i + num / i);
}
}
i++;
}
return num === sum;
};
执行用时 : 56 ms, 在所有 JavaScript 提交中击败了100.00%的用户
内存消耗 : 34.9 MB, 在所有 JavaScript 提交中击败了17.86%的用户