LeetCode算法题-Perfect Number(Java实现)

HAL库:中断处理函数 及 weak弱声明中断回调函数 详解 HAL库中断处理函数 及 weak弱声明中断回调函数 阅读详情

这是悦乐书的第249次更新,第262篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第116题(顺位题号是507)。我们定义Perfect Number是一个正整数,它等于除了它自己之外的所有正除数之和。现在,给定一个整数n,编写一个函数,当它是一个完美数字时返回true,否则返回false。例如:

输入:28

输出:true

说明:28 = 1 + 2 + 4 + 7 + 14

注意:输入数字n不会超过100,000,000。(1E8)

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

特殊情况:最小Perfect Number为6,奇数不可能是Perfect Number

正常情况:num对从2开始的正整数做取余操作,等于0,就表示能够被整除,将能够被整除的数累加起来,最后判断与num是否相等。在循环中,我们可以将num除以2再判断,而不必一直遍历到num,因为超过num/2的数再乘以另外一个数(1除外)肯定会大于num。

此解法的时间复杂度是O(n),其中n只用判断n/2次,空间复杂度是O(1)。

public boolean checkPerfectNumber(int num) {
    if (num < 6 || num%2 != 0) {
        return false;
    }
    int sum = 1;
    for (int i=2; i<=num/2; i++) {
        if (num%i == 0) {
            sum += i;
        }
    }
    return sum == num;
}

03 第二种解法

我们是不是可以将for循环中的循环次数再缩小一点?第一种解法是num/2次,而一个正整数它所包含的因子,两两相乘,当两因子无限逼近的时候,就是正整数的平方根,但是使用平方根作为循环次数的上限,会把右边的因子排除掉,所以我们需要提前就加进去,当num能被当前因子整除时,它的商就是右边的一个因子,所以需要将两个因子都加上。最后还是判断因子之和是否与num相等。

此解法的时间复杂度是O(n),其中n只用判断根号n次,空间复杂度是O(1)。

public boolean checkPerfectNumber2(int num) {
    if (num < 6 || num%2 != 0) {
        return false;
    }
    int sum = 1;
    for (int i=2; i<=Math.sqrt(num); i++) {
        if (num%i == 0) {
            sum += i + num/i;
        }
    }
    return sum == num;
}

04 第三种解法

最小的Perfect Number是6,接着是28,然后是496

6: 2x3 true

28: 4x7 true

120: 8x15 false

496: 16x31 true

2016: 32x63 false

8128: 64x127 true

上面这些数,可以看做2的(n-1)次方与2的n次方再减1的乘积,其中n从2开始,但是并非所有的n都符合,在上面几个数中,当n等于4和6时是不符合Perfect Number的,这里直接给出符合的数吧,2,3,5,7,13,17,19,31,至于17,19,31这几个次方数,做乘法会溢出,可以直接不考虑,至于为什么是这几个数,可以一个一个往下推,不难。当然,你要是把int范围内的5个Perfect Number(第5个是33550336)都找出来了,直接做判断也行。

public boolean checkPerfectNumber3(int num) {
    int[] primes = {2,3,5,7,13};
    for (int p: primes) {
        if ((1 << (p - 1)) * ((1 << p) - 1) == num) {
            return true;
        }
    }
    return false;
}

05 小结

算法专题目前已日更超过三个月,算法题文章116+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

YOLOv8改进 | 注意力篇 | YOLOv8引入EMAttention(EMA)注意力 具体来说,除了对全局信息进行编码以重新校准每个并行分支中的通道权重之外,还通过跨维度交互来进一步聚合两个并行分支的输出特征,以捕获像素级的成对关系。3. 跨空间学习:除了在每个并行子网络中建立局部的跨通道交互外,EMA模块还通过跨空间学习方法融合了两个并行子网络的输出特征图。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv8改进有效涨点专栏,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~ 阅读详情

相关推荐

虚拟机扩容——非LVM分区

虚拟机扩容——非LVM分区

ytraister的博客 3905

Java实现完全数(Perfect number)

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

Lilyの博客 ٩(❛ัᴗ❛ั) 8482

Java实现双色球&大乐透随机选号算法——原理详解与代码实战

掌握核心语法:集合操作、随机数生成、排序。贴近实际场景:将编程知识应用于生活问题的解决。

wangchl0932的博客 4990

经典算法题之Happy Number

问题描述: Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of

slowdreamer的专栏 882

使用逻辑分析仪处理IIC信号

逻辑分析仪

xc_123的博客 4486

基于STM32的红外测温系统设计

为了实现本次的毕业设计,我搜集了大量的文献与资料,通过这些资料了解到红外测温的优点,与实现所需的基本器件,并设计了几个方案,最终选择了STM32作为主控芯片,为此还查阅了关于STM32的资料,在此次设计中采用的是MLX90614医用红外测温模块,通过查阅其数据手册了解其测量精度高且自带温度补偿,所以选择了该传感器作为红外测温模块,本次设计到此已经基本完成,硬件部分和软件部分的设计已基本完成。

weixin_112233的博客 1423

Floyd判圈算法 leetcode 202题Happy Number

今天,日常刷leetcode,遇到202问题如下:Write an algorithm to determine if a number is "happy".A happy number is a number defined by the following process: Starting with any positive integer, replace the number by t...

chenshusunny的博客 634

海康H304NAS 刷机飞牛

本文旨在分享如何将闲置的海康威视H304 NAS刷入飞牛NAS系统,并利用iStoreOS作为安装媒介。之前因为使用极空间NAS,这台H304闲置已久。最近尝试了飞牛NAS,在虚拟机上安装后挂载极空间的电影资源,体验不错,于是决定重新折腾这台H304。我个人喜欢尝试新系统,之前经常更新H304的固件,但设备总在使用一两年后出现故障,需要联系技术清理日志才能恢复。最后一次设备“变砖”后,连技术人员也联系不上了,自己尝试修复未果,设备就此闲置两三年。

u012985257的博客 2755

挑战CPU运算能力-寻找完美数(Perfect Numbers)

任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数。 如6的所有真约数是1、2、3,而且6=1+2+3。像这样,一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数。 在编写这段代码前,没有想到完美数这么少,100以内只有6、28两个;1亿以内,也才4个。 计算1亿以内的完美数时,实在是挑战计算机的运算能力啊,两个小时没算完,在哪里能借个超级计算机用用呢?...

预见未来to50的专栏 2450

记一次在JAVA中客户端使用axis调用webservice服务端出现的异常:Unmarshalling Error: For input string: ""

在使axis调用webservice服务端,参照网上给的demo: Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint);//设置服务请求路径 QName qn = new QName(name); call.setOperationName(qn); call.addParamet

kry1201的专栏 8082

使用 Requests 实现视觉中国图片爬取

本文介绍了一种高效获取视觉中国图片素材的技术方案,通过分析网站请求机制,采用API接口和页面解析两种方式实现批量下载。系统配置了完整的请求头信息模拟浏览器访问,支持从首页HTML和后续页JSON数据中提取图片链接,并能自动保存到本地。该方案解决了手动下载效率低下的问题,为计算机视觉研究和内容创作提供了便捷的素材获取途径。核心功能包括:解析Cookies、配置请求头、提取图片URL(正则匹配和JSON解析)以及本地存储管理,代码结构清晰可扩展至其他关键词搜索。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 135

java perfect number_LeetCode算法题-Perfect Number(Java实现)

这是悦乐书的第249次更新,第262篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第116题(顺位题号是507)。我们定义Perfect Number是一个正整数,它等于除了它自己之外的所有正除数之和。现在,给定一个整数n,编写一个函数,当它是一个完美数字时返回true,否则返回false。例如:输入:28输出:true说明:28 = 1 + 2 + 4 + 7 + 14...

weixin_35679331的博客 87

048、NPU的批处理(Batching):提高吞吐量的技巧

摘要: NPU批处理通过合并多个输入样本提升计算效率,但需注意硬件特性与数据布局。关键点包括:1) 批处理引擎需填充对齐,非2的幂次可能降低性能;2) 访存开销分摊是主要收益,但DDR带宽可能成为瓶颈;3) 内存需连续且对齐,排列格式(NHWC/NCHW)因NPU而异;4) 动态批处理灵活但性能损失10-20%;5) 批处理可能放大量化误差。调优需实测硬件限制,平衡吞吐与延迟,并考虑功耗影响。批处理对小模型收益有限,适合大模型优化。

m0_50546716的博客 27

[LeetCode] Perfect Number 完美数字

We define the Perfect Number is apositiveinteger that is equal to the sum of all itspositivedivisors except itself. Now, given anintegern, write a function that returns true when it is a perfect number and false when it is not. Example: Inp...

u011250186的博客 465

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java算法题解法_LeetCode算法题-Valid Perfect Square(Java实现-四种解法)

这是悦乐书的第209次更新,第221篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367)。给定正整数num,写一个函数,如果num是一个完美的正方形,则返回True,否则返回False。例如:输入:16输出:true输入:14输出:false注意:不要使用任何内置库函数,例如sqrt。本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,...

weixin_39695374的博客 148

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java perfect number_[LeetCode] 507. Perfect Number 完美数字

We define the Perfect Number is apositiveinteger that is equal to the sum of all itspositivedivisors except itself.Now, given anintegern, write a function that returns true when it is a perfect ...

weixin_35817272的博客 261

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java描述 LeetCode,279. Perfect Squares

1-1:题目 Given an integer n, return the least number of perfect square numbers that sum to n. A perfect square is an integer that is the square of an integer; in other words, it is the product of some integer with itself. For example, 1, 4, 9, and 16 are per

人在江湖 420

java perfect number_[LeetCode] Perfect Number 完美数字

We define the Perfect Number is apositiveinteger that is equal to the sum of all itspositivedivisors except itself.Now, given anintegern, write a function that returns true when it is a perfect ...

weixin_33272515的博客 273

leetcode【507】Perfect Number

写在最前面:刷点简单的题水一水 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...

ssjdoudou的博客 1万+

【Leetcode】Perfect Squares

题目链接:https://leetcode.com/problems/perfect-squares/ 题目: Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n. For examp

业精于勤,荒于嬉 3410

LeetCode-279. Perfect Squares [C++][Java]

Given an integern, returnthe least number of perfect square numbers that sum ton. Aperfect squareis an integer that is the square of an integer; in other words, it is the product of some integer with itself. For example,1,4,9, and16are perfect s

贫道绝缘子的博客 2920

完美的求解java代码_LeetCode算法题-Valid Perfect Square(Java实现-四种解法)

这是悦乐书的第209次更新,第221篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367)。给定正整数num,写一个函数,如果num是一个完美的正方形,则返回True,否则返回False。例如:输入:16输出:true输入:14输出:false注意:不要使用任何内置库函数,例如sqrt。本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,...

weixin_39837139的博客 142

LeetCode算法题-Valid Perfect Square(Java实现-四种解法)

这是悦乐书的第209次更新,第221篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367)。给定正整数num,写一个函数,如果num是一个完美的正方形,则返回True,否则返回False。例如: 输入:16 输出:true 输入:14 输出:false 注意:不要使用任何内置库函数,例如sqrt。 本次解题使用的开发工具是eclipse,jdk使...

小川的博客 213
上一篇: LeetCode算法题-Relative Ranks(Java实现)
下一篇: LeetCode算法题-Fibonacci Number(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值