Python|Leetcode《507》|完美数
Posted 二哥不像程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python|Leetcode《507》|完美数相关的知识,希望对你有一定的参考价值。
专栏《LeetCode|一刷到底》
打卡每天leetcode精选每日一题(尽量不断更!)
点击关注不迷路!!!
一、题目描述
- 题目:完美数
- 难度:简单
- 描述:对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数 n, 如果是完美数,返回 true,否则返回 false
- 示例1
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。
- 示例2
输入:num = 6
输出:true
- 示例3
输入:num = 496
输出:true
二、题目解析
本题的常规解题思路在于判断能够乘得给定数值的两个因子中小的因子的最大值为多少,解释如下:
以数字36为例,可以拆解的因子如下(本身不算):
- 2*18
- 3*12
- 4*9
- 6*6
当对36进行开方得到6*6的时候,小的因子的最大值为6,因此我们只需要遍历每个数据的开方数为次数,计算能够整除时的因子数即可。最后全部遍历完成,进行最终的加法判断。
三、解题代码
解法(一)
class Solution:
def checkPerfectNumber(self, num: int) -> bool:
if num <= 0 or num == 1:
return False
lst = [1]
for i in range(2, ceil(sqrt(num))):
if num % i == 0:
lst.append(i)
lst.append(num / i)
if sum(lst) == num:
return True
return False
以上是关于Python|Leetcode《507》|完美数的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 507 完美数[枚举] HERODING的LeetCode之路