天天看點

[LeetCode] Perfect Number 完美數字

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:

Note: The input number n will not exceed 100,000,000. (1e8)

這道題讓我們判斷給定數字是否為完美數字,并給來完美數字的定義,就是一個整數等于除其自身之外的所有的因子之和。那麼由于不能包含自身,是以n必定大于1。其實這道題跟之前的判斷質數的題蠻類似的,都是要找因子。由于1肯定是因子,可以提前加上,那麼我們找其他因子的範圍是[2, sqrt(n)]。我們周遊這之間所有的數字,如果可以被n整除,那麼我們把i和num/i都加上,對于n如果是平方數的話,那麼我們此時相同的因子加來兩次,是以我們要減掉一次。還有就是在周遊的過程中如果累積和sum大于n了,直接傳回false即可。在循環結束後,我們看sum是否和num相等,參見代碼如下:

解法一:

<a>class Solution {</a>

下面這種方法叼的不行,在給定的n的範圍内其實隻有五個符合要求的完美數字,于是就有這種枚舉的解法,那麼套用一句諸葛孔明的名言就是,我從未見過如此厚顔無恥之解法。哈哈,開個玩笑。寫這篇部落格的時候,國足正和伊朗進行十二強賽,上半場0比0,希望國足下半場能進球,好運好運,不忘初心,方得始終~

解法二:

參考資料:

<a href="https://discuss.leetcode.com/topic/84259/simple-java-solution" target="_blank">https://discuss.leetcode.com/topic/84259/simple-java-solution</a>

,如需轉載請自行聯系原部落客。

繼續閱讀