当前位置: 首页 > news >正文

Leetcode279:完全平方数

给你一个整数n,返回和为n的完全平方数的最少数量

完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,14916都是完全平方数,而311不是。

示例 1:

输入:n =12输出:3解释:12 = 4 + 4 + 4

示例 2:

输入:n =13输出:2解释:13 = 4 + 9

提示:

  • 1 <= n <= 10^4

直接上代码,实在看不懂就学会纯暴力解就行了,面试没问题的:

class Solution { /** * 纯暴力解 * @param n * @return */ public static int numSquares1(int n) { /** * 最差的情况n = 1 * 1+ 1*1 ....一共n个1*1 * 我们从2开始试,看看能不能让结果变的更小 */ int res = n, num = 2; while(num * num <= n) { /** * 这句比较难理解,我们举个栗子,假设n=17 * a = 17 / (2 * 2) = 4 b = 17 % (2 * 2) = 1 * 是不是太简单了,我们举个复杂点的例子 * 假设n = 99 * a = 99/(2*2)=24 b = 99 % (2*2)= 3 * 这里我们是想要这样一个一个结果 * n = a * (num * num) + b * res=a*num的平方(a个)+b能分成多少个 */ int a = n /(num * num), b = n % (num * num); res = Math.min(res, a + numSquares(b)); num ++; } return res; } /** i=1,result=1 i=2,result=2 i=3,result=3 i=4,result=1 i=5,result=2 i=6,result=3 i=7,result=4 i=8,result=2 i=9,result=1 i=10,result=2 i=11,result=3 i=12,result=3 i=13,result=2 i=14,result=3 i=15,result=4 i=16,result=1 i=17,result=2 i=18,result=2 i=19,result=3 i=20,result=2 i=21,result=3 i=22,result=3 i=23,result=4 i=24,result=3 i=25,result=1 i=26,result=2 i=27,result=3 i=28,result=4 i=29,result=2 i=30,result=3 i=31,result=4 i=32,result=2 i=33,result=3 i=34,result=2 i=35,result=3 i=36,result=1 i=37,result=2 i=38,result=3 i=39,result=4 i=40,result=2 i=41,result=2 i=42,result=3 i=43,result=3 i=44,result=3 i=45,result=2 i=46,result=3 i=47,result=4 i=48,result=3 i=49,result=1 i=50,result=2 i=51,result=3 i=52,result=2 i=53,result=2 i=54,result=3 i=55,result=4 i=56,result=3 i=57,result=3 i=58,result=2 i=59,result=3 i=60,result=4 i=61,result=2 i=62,result=3 i=63,result=4 i=64,result=1 i=65,result=2 i=66,result=3 i=67,result=3 i=68,result=2 i=69,result=3 i=70,result=3 i=71,result=4 i=72,result=2 i=73,result=2 i=74,result=2 i=75,result=3 i=76,result=3 i=77,result=3 i=78,result=3 i=79,result=4 i=80,result=2 i=81,result=1 i=82,result=2 i=83,result=3 i=84,result=3 i=85,result=2 i=86,result=3 i=87,result=4 i=88,result=3 i=89,result=2 i=90,result=2 i=91,result=3 i=92,result=4 i=93,result=3 i=94,result=3 i=95,result=4 i=96,result=3 i=97,result=2 i=98,result=2 i=99,result=3 *总结一下规律, * (1) 不管对于什么数来说,一共可以分解为4个以内 * (2) 出现一个的时候很容易求,就是sqrt(n) * sqrt(n) = n; * (3) n % 8 == 7的时候一定是4 * (4) 消去4的因子后%8==7一定是四个 */ /** * 根据暴力解找的规律 * @param n * @return */ public static int numSquares2(int n) { int rest = n; /** * 消去4的因子 */ while(rest % 4 == 0) { rest = rest / 4; } /** * 模8==7就是四个 */ if(rest % 8 == 7) { return 4; } /** * 如果刚好是某个数的平方,是1个 */ int f = (int)Math.sqrt(n); if(f * f == n) { return 1; } /** * 如果上面两种都不是,就肯定是2或者3,尝试一下 * 先设置为最大3 */ int res = 3; for(int first = 1; first * first <= n; first ++) { int left = n - first * first; int sqrtLeft = (int)Math.sqrt(left); if(sqrtLeft * sqrtLeft == left) { res = 2; break; } } return res; } /** * 数学解:四平方和定理 * @param n * @return */ public static int numSquares(int n) { /** * 规律4,消除4的因子 */ while (n % 4 == 0) { n = n / 4; } if(n % 8 == 7) { return 4; } for(int a = 0; a * a <= n; a++) { /** * b是剩余部分的平方根 */ int b = (int)Math.sqrt(n - a * a); /** * 如果两个数的平方和等于n,分为两种情况 * 1.如果a和b某一个为0,则另外一个数的平方等于n,这种的答案是1 * 2.如果a和b都不为0,则n=a*a + b*b也就是答案为2 */ if(a * a + b * b == n) { return a == 0 || b == 0? 1 : 2; } } /** * 最多有1,2,3,4四种可能性,1,2,4都每返回,那只能是3了 */ return 3; } }

运行结果:

http://www.jsqmd.com/news/334961/

相关文章:

  • 基于PSO-ELM、GA-ELM、SSA-ELM、GA-SSA-ELM和ELM对比的多输入回归预测附Matlab代码
  • SSM计算机毕设之基于JAVA的机床厂车辆管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • SSM毕设项目:基于SSM的高校共享单车管理系统设计与实现(源码+文档,讲解、调试运行,定制等)
  • Pytest fixture 及 conftest详解!
  • 基于GA优化LSSVM的应变片式力传感器温度补偿附Matlab代码
  • SSM毕设项目:基于JAVA的机床厂车辆管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • DevOps流水线设计:使用Jenkins与GitLab CI/CD自动化部署
  • 大数据实时处理方案对比:Flink与Spark Streaming架构选型指南
  • Rust并发编程:所有权系统与线程安全设计模式
  • 软件测试面试?太简单了 2026测试面经 (答案+思路+史上最全)
  • 【毕业设计】基于JAVA的机床厂车辆管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • Go语言并发编程模式:从Goroutine到Channel的最佳实践
  • <span class=“js_title_inner“>让美好纪念,都触手可及!文心+飞桨携手厦门碳水时代助力AI影像实物化</span>
  • 网络安全基础:使用Wireshark进行网络协议分析与故障排查
  • 火山引擎记忆库Mem0发布,全面兼容Mem0开源社区生态
  • 云原生监控体系搭建:Prometheus与Grafana实战指南
  • 软件测试报告有哪些内容?
  • <span class=“js_title_inner“>NC︱南农沈其荣院士袁军组-增强土壤瓜氨酸降解功能缓解土传镰刀菌枯萎病</span>
  • LoadRunner性能测试基本步骤
  • 【毕业设计】基于JavaWeb的东北特色农产品电商后台管理系统的设计与开发(源码+文档+远程调试,全bao定制等)
  • 软测面试丨关于JMeter的面试问题,看这篇就够了!
  • <span class=“js_title_inner“>仓储机器人巨头,6亿订单!</span>
  • 【计算机毕业设计案例】基于JAVA的机床厂车辆管理系统的设计与实现(程序+文档+讲解+定制)
  • 测试工程师究竟有多吃香?10年老司机真实经历告诉你!
  • 字符串相乘
  • 查重一片红?这10款降ai率工具深度实测,帮你稳住毕业证(附避坑指南)
  • AI应用架构师必读:智能制造质量控制AI系统的模型版本管理与迭代策略
  • 【毕业设计】基于SSM的高校共享单车管理系统设计与实现(源码+文档+远程调试,全bao定制等)
  • <span class=“js_title_inner“>自动化立体仓库技术标书--详细版</span>
  • 收藏这篇就够了:大模型、智能体、AIGC入门到精通,小白也能学