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;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章