news 2026/4/25 6:20:42

LeetCode热题100 完全平方数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode热题100 完全平方数

题目描述

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

示例 1:

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

示例 2:

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

提示:

1 < = n < = 10 4 1 <= n <= 10^41<=n<=104

思路1: 动态规划

我们考虑f[i]为第i个数需要的最少完全平方数的个数,枚举每个比他小的完全平方数j 2 j ^ 2j2,则有f [ i ] = f [ i − j 2 ] + 1 f[i] = f[i - j ^ 2] + 1f[i]=f[ij2]+1, 这里的1就是j 2 j ^ 2j2, 我们枚举每个j的时间复杂度是 o(n \sqrt{n}n), 枚举i的时间复杂度为o(n),总的时间复杂度为o ( n n ) o(n\sqrt{n})o(nn)

代码1

classSolution{public:intnumSquares(intn){vector<int>f(n+1,0);unordered_set<int>s;// 记录这个数是不是完全平方数for(inti=1;i<=100;++i){s.insert(i*i);}for(inti=1;i<=n;++i){f[i]=INT_MAX;// 需要j^2一个, 剩下的i - j ^ 2的最少个数已经出现for(intj=1;j<=i/j;++j){f[i]=min(f[i],1+f[i-j*j]);}}returnf[n];}};

思路2: 数学,四平方和定理

有两个结论:

  • 任意一个正整数都可以被表示为至多四个正整数的平方和。
  • 当且仅当n ≠ 4 k × ( 8 m + 7 ) n \neq 4^k \times (8m + 7)n=4k×(8m+7)时,n nn可以被表示为至多三个正整数的平方和。因此,当n = 4 k × ( 8 m + 7 ) n = 4^k \times (8m + 7)n=4k×(8m+7)时,n nn只能被表示为四个正整数的平方和。此时我们可以直接返回 4。

我们枚举答案的个数:

  • 当 可以开方,o(1),答案为1;
  • 当 可以表示成两个数完全平方和相加,o ( n ) o(\sqrt{n})o(n),答案为2;
  • 当 可以表示成n = 4 k × ( 8 m + 7 ) n = 4^k \times (8m + 7)n=4k×(8m+7),o(logn), 答案为4;
  • 否则答案为3;
  • 因此,总的时间复杂度为o ( n ) o(\sqrt{n})o(n)

代码2

classSolution{public:// 是否是完全平方数 o(1)boolisPerfectSquare(intx){inty=sqrt(x);returny*y==x;}// 是否是两个数完全平方相加 o(n ^ (1/2))boolisTwoPerfectSquareadd(intx){for(inti=1;i<=x/i;++i){intj=x-i*i;if(isPerfectSquare(j)){returntrue;}}returnfalse;}// 是否是4个数相加 o(logn)boolcheckAnswer4(intx){while(x%4==0){x/=4;}returnx%8==7;}intnumSquares(intn){if(isPerfectSquare(n))return1;if(checkAnswer4(n))return4;if(isTwoPerfectSquareadd(n))return2;return3;}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 6:20:20

SEO业务必看!代理IP选型全指南(避开90%的坑,附场景化适配方案)

做SEO的核心痛点之一&#xff0c;就是“IP关联与反爬封禁”——无论是关键词排名查询、多平台外链建设、竞品数据采集&#xff0c;还是多账号矩阵运营&#xff0c;频繁用单一IP操作&#xff0c;轻则被搜索引擎限流、排名查询数据失真&#xff0c;重则账号被封、业务中断。 很多…

作者头像 李华
网站建设 2026/4/25 6:20:18

2倍超越 DeepEP,无问芯穹联合清华等推出会“空中变阵”的 FUSCO 通信库,大幅降低MoE模型训练推理成本,让面向 Agent 的硬件效率狂飙

随着 ChatGPT、Gemini、DeepSeek-V3、Kimi-K2 等主流大模型纷纷采用混合专家架构&#xff08;Mixture-of-Experts, MoE&#xff09;及专家并行策略&#xff08;Expert Parallelism, EP&#xff09;&#xff0c;MoE 技术已在产业应用中逐渐成为主流。与此同时&#xff0c;以代码…

作者头像 李华
网站建设 2026/4/25 6:18:45

工业现场调试总失败?揭秘VSCode 1.89+最新Cortex-Debug插件在CANopen/PROFINET设备中的7个隐性兼容陷阱(附Patch补丁包)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;工业现场调试失败的典型现象与归因分析 工业自动化系统在现场调试阶段频繁出现非预期中断&#xff0c;是项目交付延期的核心诱因之一。这类失败往往表面表现为通信超时、PLC 状态异常或 HMI 数据冻结&a…

作者头像 李华
网站建设 2026/4/25 6:16:47

GmSSL国密算法安全通信深度解析:TLCP与TLS 1.3架构设计与实现原理

GmSSL国密算法安全通信深度解析&#xff1a;TLCP与TLS 1.3架构设计与实现原理 【免费下载链接】GmSSL 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱 项目地址: https://gitcode.com/gh_mirrors/gm/GmSSL 在数字化安全需求日益增长的背景下&#xff0c;国密算法的标准化应用…

作者头像 李华
网站建设 2026/4/25 6:14:28

千问3.5-2B电路仿真辅助:Multisim设计描述与验证

千问3.5-2B电路仿真辅助&#xff1a;Multisim设计描述与验证 1. 电子工程师的新助手 作为一名电子工程师&#xff0c;你是否经常遇到这样的困扰&#xff1a;脑海中有一个电路设计想法&#xff0c;却需要花费大量时间在Multisim中反复尝试才能实现&#xff1f;或者面对一堆仿真…

作者头像 李华
网站建设 2026/4/25 6:12:42

深度学习损失函数选型与优化实战指南

1. 深度学习中损失函数的核心作用损失函数&#xff08;Loss Function&#xff09;是神经网络训练过程中的导航仪&#xff0c;它量化了模型预测结果与真实值之间的差异程度。就像汽车仪表盘上的油量表会告诉你剩余油量距离空箱还有多远&#xff0c;损失函数用具体数值告诉开发者…

作者头像 李华