0%

perfect-number

Perfect Number – LeetCode 507

Problem

Description

We define the Perfect Number is a positive integer that is equal to the sum of all its positive divisors except itself.

Now, given an integer n, write a function that returns true when it is a perfect number and false when it is not.

Example

Input: 28
Output: True
Explanation: 28 = 1 + 2 + 4 + 7 + 14

Answer

Original

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
bool checkPerfectNumber(int num) {
if(num == 1) return false;
for(int i = sqrt(num), n = num; i >= 2; --i){
if(n % i == 0){
num -= n / i;
num -= i;
if(num < 0) return false;
}
}
return num == 1;
}
};

思路

看题说话。时间复杂度$O(\sqrt{n})$,空间复杂度$O(1)$。
耗时$6$ ms,排名$18.63\%$

Better

思路

还没看到更好的解法。