题目地址:
https://leetcode.com/problems/perfect-number/
给定一个正整数,判断其是否是完全数(即perfect number,指的是其除了自己以外的正因子之和等于自己)。
遍历其因子即可。需要注意若其为完全平方数,则其平方根只能加一次。代码如下:
public class Solution {
public boolean checkPerfectNumber(int num) {
// 1需要特判
if (num == 1) {
return false;
}
int sum = 1;
// 约数从2开始遍历
for (int i = 2; i * i <= num; i++) {
if (num % i == 0 && i * i != num) {
sum += i + num / i;
}
// 如果是完全平方数,其平方根只加一次
if (i * i == num) {
sum += i;
}
}
return sum == num;
}
}
时间复杂度 O ( n ) O(\sqrt n) O(n),空间 O ( 1 ) O(1) O(1)。