LeetCode 507 完美数 题解

对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。

给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False

 

示例:

输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14

这个题目,所有正因子,只有一次出现,也就是 4*7 和 7*4是一样的,只算一个4和一个7,6*6的话,也只有一个6。所以只要计算num的开平方就可以了,即比如28,开方之后只会算到4*7 而不会 计算到后面的7*4,所以不会重复的计算 (两个7,两个4);

对于一样的数比如6*6,放到最后单独计算( if(i*i == num)),而不是i <= Math.sqrt(num) 放入循环条件。因为6*6的两个6只算一个,所以sum只用加一次就好了。

class Solution {
    public boolean checkPerfectNumber(int num) {
        
        if(num==1) return false;
        int i = 2,sum = 1;                         //1肯定算,不计算1了直接加进结果,
        for(;i < Math.sqrt(num);i++){
            if(num % i == 0){
                sum += i;
                sum = sum + (num/i);
            }
        }
        
        if(i*i == num){
            sum += i;
        }
        
        if(sum == num){
            return true;
        }
        
        return false;
    }
}

你可能感兴趣的:(LeetCode刷题记录)