leetcode【507】Perfect Number
阿新 • • 發佈:2018-11-01
寫在最前面:刷點簡單的題水一水
leetcode【507】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:
Input: 28
Output: True
Explanation: 28 = 1 + 2 + 4 + 7 + 14
Note: The input number n will not exceed 100,000,000. (1e8)
題目很簡單,沒啥好說的,求下該數的因子,把自己去掉即可
import math class Solution: def checkPerfectNumber(self, num): """ :type num: int :rtype: bool """ if num <= 1: return False rlist = [] i = 1 newnum = 0 while i <= math.sqrt(num): if num % i == 0: a = num // i rlist.append(i) if (a != num) & (a != i): rlist.append(a) i += 1 for j in range(len(rlist)): newnum += rlist[j] if num == newnum: return True else: return False
放一段java的,思路是一樣的,具體細節你想怎麼寫就怎麼寫,從0開始算,還是從1開始,無所謂
class Solution { public boolean checkPerfectNumber(int num) { if(num <=1) return false; int sum = 0; int top = (int) Math.sqrt(num); for(int i = 1;i <= top; i++) { if((num % i) ==0) { sum += i; if ((num / i) != i && (num / i) !=num) {sum += num /i;} } } return sum == num; } }
public class Solution {
public boolean checkPerfectNumber(int num) {
if(num <= 1)
return false;
int sum = 1;
int up = (int)Math.sqrt(num);
for(int i = 2; i <= up; i++){
if((num % i) == 0) {sum += i; sum += num / i;}
}
return sum == num;
}
}
python和java來回切有時候會反應不過來...不過都是本地和leetcode除錯通過的,下面放一個本地的測試程式碼:
package Arithmetic;
public class checkPerfectNumber {
public static void main(String[] args) {
// TODO Auto-generated method stub
checkPerfectNumber check = new checkPerfectNumber();
check.checkPerfectNumber(28);
System.out.println(check.checkPerfectNumber(28));
}
public boolean checkPerfectNumber(int num) {
if(num <=1)
return false;
int sum = 0;
int top = (int) Math.sqrt(num);
for(int i = 1;i <= top; i++) {
if((num % i) ==0) {
sum += i;
if ((num / i) != i && (num / i) !=num)
{sum += num /i;}
}
}
System.out.println(sum);
return sum == num;
}
}