Leetcode 279 完全平方数

Leetcode 279:完全平方数(最详细解决方案!!!) 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 解题思路 很多人第一眼看到这个问题,想到的第一种做法就是使用贪心算法,但是... 阅读详情

1.题目

在这里插入图片描述

解法:(BFS队列实现)

这种题目特点就是:你同时有好多的选项可以选择。
思想就是:列举出所有可能组成该数的完全平方数,那么一个点就对应arr.size()的选择,使用队列记录每次减之后的结果,使用count记录减的次数,寻找第一个减为0的数。

class oneVal{
    int res = 0;
    int count = 0;
    public  oneVal(int r, int c){
        res = r;
        count = c;
    }
}

class Solution {
    public int numSquares(int n) {
            int res = 0;
            oneVal tmp = null;
            ArrayList<Integer> arr = new ArrayList<>();
            int i = 1;
            while(i * i <= n){
                arr.add(i*i);
                ++i;
            }
            Queue<oneVal> queue = new LinkedList<oneVal>();
            queue.offer(new oneVal(n, 0));
            while(!queue.isEmpty()){
                tmp = queue.poll();
                for(i = arr.size()-1; i >= 0; i--){
                    res =  tmp.res - arr.get(i);
                    if(res > 0){
                       queue.offer(new oneVal(res, tmp.count+1));
                    }else if(res == 0){
                        return tmp.count+1;
                    }else{
                        continue;
                    }
                }
            }
            return -1;
    }
}

(1)一次性将所有的余数 对应 这个平方数,这样的话,每次level就可以统一计算。
(2)余数如果小于了平方数,那么就是不合理的,因为我要找到比我小的完全平方数。


import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public int numSquares(int n) {

        ArrayList<Integer> square_nums = new ArrayList<>();
        for (int i = 1; i * i <= n; ++i) {
            square_nums.add(i * i);
        }

        Set<Integer> queue = new HashSet<Integer>();
        queue.add(n);

        int level = 0;
        while (queue.size() > 0) {
            level += 1;
            Set<Integer> next_queue = new HashSet<Integer>();
            // 从队列出来的每一个数都会和完全平方数进行比对,所以只要相等,那就结束
            for (Integer remainder : queue) {
                for (Integer square : square_nums) {
                    // 因为Integer类,所以判断内容相等用equals
                    if (remainder.equals(square)) {
                        return level;
                    // 都比余数大了,那后面的数,就没必要比了(从小到大)
                    } else if (remainder < square) {
                        break;
                    } else {
                        // 因为得到的余数和原来的不一样,所以就使用了新的quque
                        next_queue.add(remainder - square);
                    }
                }
            }
            queue = next_queue;

        }
        return level;
    }
}

ESP8266+ITR8307实战:如何用反射式光电管实现5cm远距离检测(附避坑指南) 本文详细介绍了如何利用ESP8266的ADC功能与ITR8307反射式光电管,通过调制解调、硬件电路优化及软件同步采样策略,实现5cm稳定远距离检测。文章提供了完整的硬件设计、代码实现与调优避坑指南,有效解决了环境光干扰与信号衰减难题,适用于智能车、自动化等需要可靠非接触检测的项目。 阅读详情

相关推荐

360可视门铃双摄版数据恢复实战:BIN文件解析与视频重组

本文详细解析了360可视门铃双摄版BIN文件的数据恢复过程,包括文件结构分析、双摄像头数据存储机制及视频重组技术。通过Python开发环境和FFmpeg工具链,成功实现了H.265视频流的解析与重组,为智能家居设备数据恢复提供了实用解决方案。

weixin_29196891的博客 913

【LeetCode】279.完全平方数(四种方法,不怕不会!开拓思维)

题目 链接 题解 方法一:动态规划 思路 1,对于正整数N, 所有的解都是 N = 一个整数的平方 + 另一个整数; 直白点, N = AxA + B 2, 而B又是由 “一个整数的平方 + 另一个整数” 组成的; 那么, B = CxC + D 3,总结下就是:N = IxI + N’ 而 N’ = IxI + N’’ 4, 本题要解的问题:正整数N最少由多个平方数相加; 5, 那么,N的最优解 = 1 + (N’的最优解)。而N’肯定小于N。 6, 所以本题的思路就是,对每一个N,观察1到N-1中,谁

Viper的程序员修炼手册 3995

峰岹FU6832L双核电机控制芯片实战:从FOC算法到BLDC/PMSM驱动开发

在嵌入式系统和电机控制领域,磁场定向控制(FOC)是实现无刷直流电机(BLDC)和永磁同步电机(PMSM)高效、平稳运行的核心算法。其原理是通过坐标变换将三相交流量分解为直流量,实现类似直流电机的转矩与磁场解耦控制,从而提升效率、降低噪音与振动。这项技术的工程价值在于能以更低的处理器开销实现高性能驱动,广泛应用于消费电子、工业自动化与智能家电。本文以峰岹FU6832L芯片为例,深入解析其独特的双核架构——将实时性要求极高的FOC运算交由专用硬件引擎处理,解放主控CPU处理应用逻辑,并结合PID参数整定、电流

weixin_29570795的博客 519

【LeetCode】279完全平方数

思路:动态规划,最初想到的公式是: 后来提交之后报出超时错误,因此参考了题解,找到正确的公式为: 第二个公式直接计算“前段”为平方数的情况,比起第一个公式,时间复杂度从n^2降低到n^1.5; 因此,仅仅写出动态规划的公式是不够的,需要保证: (1)公式的正确性; (2)公式的高效性,此一条跟题目有关。 详细分析题目中可以用来降低时间复杂度的题点,吃一堑长一智~。 ...

快乐的小J的博客 339

qPCR定量方法在肠道微生物特定种属定量应用

大家都知道肠道中有上千种细菌,肠道微生物可参与人体代谢,促进营养物质的消化吸收,肠道微生态均衡关系到身体健康,肠道微生态失衡可能会导致疾病产生。此外有文献指出肠道微生物可能与人体免疫及炎性反应等有关。目前也越来越多人关注到疾病与肠道微生物的关系,也做了很多研究及实验,一般高通量结果得到的是每个物种在样本中的相对百分含量,而不同微生物的绝对含量其实也对疾病有很重要的影响。在此分享几篇有采用qPCR方法研究疾病与肠道微生物关系的文章。 早在2013年Kim-Anne Lê1、Yan Li等人发表文章Alter

tinygene的博客 2143

CANoe_Demo_下载以及安装教程

CANoe Demo下载安装流程

Jar_Lee的博客 1万+

LeetCode 279.完全平方数

LeetCode 279.完全平方数 bfs写法,还有四平方定理,那个看不懂 public: int numSquares(int n) { vector&amp;lt;bool&amp;gt; vis(n+1,false); queue&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; q; q.push(make_pa...

缇欧的咪西 640

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3245

LeetCode 279 完全平方数

找完全平方数加和,哇赤裸裸的dp啊。 第一遍超时了 = =这种状态迁移方程复杂度较高 第二遍膜了一遍题解区的大佬们代码,涨知识辽,(vector原来可以这么用)。 新的状态迁移方程dp[i+jj]=min(dp[i+jj],dp[i]+1),每次一个普通数加上一个完全平方数的话就可以降低复杂度。 // 超时代码 = = class Solution { public: int n...

KenKing酱的呆呆博客 319

手把手带你实现DAF-Net:零代码基础入门红外与可见光图像融合(从理论到实战)

本文介绍了红外与可见光图像融合技术及DAF-Net网络的应用。红外图像能捕捉热源但缺乏细节,可见光图像纹理丰富但在低光环境下表现不佳。DAF-Net采用双分支特征提取和动态注意力融合架构,能智能分配特征权重实现优势互补。文章详细讲解了环境配置、数据集准备(如TNO数据集)和预处理方法,并提供了DAF-Net的核心代码实现,包括特征提取、注意力融合和图像重建模块。通过该技术可在安防、自动驾驶等领域获得更优质的融合图像,提升视觉感知能力。

m0_71589036的博客 233

Python爬虫实战:全方位解析前程无忧(51job)职位详情爬取及反爬破解

平台规模:覆盖全国各行业、数百万条岗位信息。数据特点:职位描述详细,职位标签丰富。数据价值:支持招聘趋势分析、职业发展研究、薪资行情调研。推荐Python 3.10+,支持最新async特性与库兼容。

2201_76125261的博客 1488

【算法题】279. 完全平方数-力扣(LeetCode)

1. **空间优化**:由于动态规划的状态转移方程只依赖于前一行的数据,可以将二维数组优化为一维数组。 2. **减少不必要的计算**:在构建完全平方数列表时,可以直接使用一个列表来存储这些数,而不需要每次计算平方。

Janium的博客 1039

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【中等】力扣算法题解析LeetCode279:完全平方数

本文介绍了如何用最少数量的完全平方数之和表示整数n。基于四平方和定理,算法通过数学方法高效求解:先去除4的因子,再依次检查1、2、4个平方数的情况,最后返回3。

ylumwd的博客 611

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

力扣题解 279 完全平方数

完全平方数 题解 Leetcode-279 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/perfect-squares 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4...

fulin9452的博客 413

jre9下载 jdk9

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

力扣完全平方数279和力扣91解码方法的做题笔记

动态规划的状态定义dp[i]:表示前i个字符的解码方式数。例如,dp[1]表示前 1 个字符的解码方式数。dp[2]表示前 2 个字符的解码方式数。以此类推。

lfm147258369的博客 1285

Leetcode 279. 完全平方数

Leetcode 279. 完全平方数1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/perfect-squares/   本质上就是一个动态规划问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #include "algori

珍惜 8955

leetcode 279——完全平方数

leetcode 279——完全平方数 题目描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 来源:力扣(LeetCode) 链接:https...

weixin_44795839的博客 252

Leetcode 279 python 完全平方数

题意: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例一: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例二: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 方法一: 广度优先遍历(图的最短路径) 举例说明方法: 例如对于上图中的13,我们...

小力子的博客 1617

LeetCode 279. 完全平方数

LeetCode 279. 完全平方数

梦~' 1033

leetcode 279,完全平方数

leetcode 279,完全平方数 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9 方法一:动态规划 构造最优子结构 for...

qq_40666620的博客 207

力扣279. 完全平方数

力扣279完全平方数 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 来源:力扣(LeetCode) 思路:对每一个数进行列举,然后把结果剩余值丢进队列里,当剩余值为0时,返回层数。那么层数怎么表示呢?可以在跟值包装一下一起丢进队列,当前层数就是队首元素的层数

Steve_Liu12399的博客 372

Leetcode 力扣279 完全平方数

Leetcode279 完全平方数

weixin_63171335的博客 261

leetcode279---完全平方数

leetcode279—完全平方数原题链接 原题简述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 解法分析 动态规划 dp[i]: 组成正整...

Again的博客 358

力扣每日一题:279. 完全平方数

目录题目:279. 完全平方数示例1示例2提示:解题思路及代码(1)完全背包问题-动态规划(2)动态规划+空间优化(3)BFS 题目:279. 完全平方数 难度: 中等 题目: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而

aruewds的博客 909

Leetcode279题完全平方数

Leetcode279题完全平方数 题目说明 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 题目思路 先把dp数组全部初始化为数组下标(因为每个数...

DeaD_PooL_的博客 410

leetcode279——完全平方数——java实现

题目要求: 分析: 这道题利用动态规划来做,参考了一位大神的博客,传送门:LeetCode 279. Perfect Squares 我们创建一个长度为n + 1的数组dp表示最少的完全平方数,则可以得到一个数学关系式: dp[i] = Math.min(dp[j] + dp[i - j], dp[i]) 根据这个表达式就可以写代码了。 具体代码如下: public class Solution...

阿花的IT历程 708
上一篇: 卷积操作和池化操作(滑动窗口实现)
下一篇: Leetcode 91.解码方法
念殊15
博客等级 码龄7年 17粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值