IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode训练507.完美数 -> 正文阅读

[数据结构与算法]LeetCode训练507.完美数

寒假闲来无事干?不如天天刷刷LeetCode涨涨知识,本来前些日子22考研结束后格外焦虑(我是23考研的),27号晚上看了汤家凤老师直播后,突然发现考研距离我越来越近了,有人说这个寒假就得开始好好准备......emmmm因人而异吧,确实给我整焦虑了,思来想去不如先放松的同时多学学数据结构,不管考哪个学校反正数据结构是肯定要学的!下面进入正题!

不知道为什么LeetCode题库出现的第一道题不是第1题而是这道507题,标记为简单,但是只有48%的通过率,点进去以后读完题,评论区的解法没把我笑死,然后看了一下解析,这居然是一种正确解法红红火火恍恍惚惚或或!!!

507.完美数

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

给定一个 整数 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

示例 4:

输入:num = 8128
输出:true

示例 5:

输入:num = 2
输出:false

提示:

1 <= num <= 10^{8}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/perfect-number
?

分析

对于输入的整数n,我们可以用枚举法找到他的所有 正因子 ,并累加在一个变量sum中,只需要最后判断sum是否等于n,即可判断输入的整数n是否为完美数,我们只需要枚举不超过\sqrt{n}的整数即可,因为对于每一个小于\sqrt{n}的正因子,他一定与一个大于\sqrt{n}的因子相乘才会等于n,在筛选过程中需要注意:

1、对于整数1,因为完美数定义在相加的因子中要排除自身,所以1不是完美数,需要单独处理

2、因为要排除自身,所以除了1之外的每一个整数都有一个单独的正因子1

3、当n为平方数时,其平方根也是一个单独的正因子,在计算时因避免重复加该值

class Solution {
public:
    bool checkPerfectNumber(int num) {
        if(num == 1)
        return false;
        int sum = 1;
        for(int d = 2; d * d < num; d++){
            if(num%d == 0){
            sum += d;
            if(d * d != num)
            sum += num/d;
            }
        }
        return sum == num;
    }
};

?代码时间复杂度为O\left ( \sqrt{num} \right ),空间复杂度为O\left ( 1 \right )

先前提到评论区的解法格外搞笑,但最后发现,原因居然是因为题目范围\left [ 1,10^{8} \right ]内的完美数只有 6, 28, 496, 8128, 33550336 这5个,故完全可以通过判断输入的整数n是否为这5个数字来解决

class Solution {
public:
    bool checkPerfectNumber(int num) {
        return num == 6 || num == 28 || num == 496 || num == 8128 || num == 33550336;
    }
};

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:11:59  更:2022-01-01 14:14:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:31:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码