(刷题笔记) Leetcode 279. 完全平方数

js代码-leetCode 279 /给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 立即下载

题目

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

示例 1:

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

示例 2:

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

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

解题思路

写了这么多道广度优先搜索和动态规划,还是写不出来这样的题目,这数学思路更加是降维打击

动态规划思路:
dp[i]里存储的是值为i的数最少需要几个完全平方数
起始条件:dp[0]=0;
转移关系:第i个数的最少完全平方数,是i减去一个完全平方数之后的那个值需要的最少数+1,也就是dp[i]=min(dp[i-j*j])+1,这个j在变动,也就变成了代码里的写法。

层序遍历思路
把数据拆成不同的层,最先让数据拆完的层就是最少的个数。

数学思路
数学定理证明每个自然数都可以表示为四个数的平方和。所以这道题目可以返回的值只有4,3,2,1这四种。
然后不同的返回值有不同的公式得出来,具体见代码。

代码(C++)

动态规划

class Solution {
public:
    int numSquares(int n) {

        vector<int> dp(n+1,INT_MAX);

        dp[0]=0;

        for(int i=1;i<=n;++i){

            for(int j=1;j*j<=i;++j){

                dp[i]=min(dp[i],1+dp[i-j*j]);
            }
        }
        
        return dp[n];
        

    }
};

BFS

class Solution {
public:
    int numSquares(int n) {

        queue<pair<int,int>> q;
        q.push(make_pair(n,0));

        vector<bool> visited(n+1,false);
        visited[n]=true;

        while(!q.empty()){

            int num=q.front().first;
            int step=q.front().second;
            q.pop();

            for(int i=1;num-i*i>=0;++i){
                int a=num-i*i;
                if(a<0) break;
                if(a==0) return step+1;
                if(!visited[a]){
                    q.push(make_pair(a,step+1));
                    visited[a]=true;
                }
            }
        }

        return 0;

    }
};

数学

class Solution {
public:
    int numSquares(int n) {


        int x=n;
        while(n%4==0) n/=4;
        if(n%8==7) return 4;

        for(int i=0;i*i<=x;++i){

            int j=pow(x-i*i,0.5);
            if(x==i*i+j*j){
                if(i==0||j==0){
                    return 1;
                }
                else{
                    return 2;
                }
            }  
        }

        return 3;
    }
};
国产HDMI2.0芯片GSV2011怎么选?手把手教你用它设计音视频采集卡(附FPGA/海思对接指南) 本文详细解析国产HDMI2.0芯片GSV2011在音视频采集卡设计中的应用,涵盖芯片选型、硬件设计要点及与FPGA/海思平台的对接指南。GSV2011凭借4K@60Hz支持、音频提取嵌入功能和高集成度,成为音视频设备的核心选择,助力开发者快速实现高性能采集卡设计。 阅读详情

相关推荐

达梦DM8整合Seata AT模式实战:手把手教你搞定分布式事务(含源码修改避坑)

本文详细介绍了达梦DM8数据库与Seata AT模式的深度整合实战,包括环境准备、架构设计、源码适配及分布式事务落地。通过独创性源码改造,解决了Seata官方对达梦数据库AT模式支持的限制,为国产数据库在微服务架构中的应用提供了可靠的事务保障。

weixin_30764771的博客 333

LeetCode---完全平方数

完全平方数 给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 ...

weixin_41563161的博客 901

Photoscan+Smart3D+CC组合建模实战:如何用三款工具打造高精度实景模型

本文详细介绍了如何整合Photoscan、Smart3D和ContextCapture三款软件,构建高效高精度的实景三维建模工作流。通过利用Photoscan稳健的空三解算、Smart3D精准的刺点优化,以及ContextCapture强大的最终建模能力,该方案能有效应对复杂地形与海量数据,显著提升模型质量与生产效率,适用于测绘、文化遗产数字化等专业领域。

weixin_29230649的博客 104

Leetcode 279.[python] 完全平方数 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)

Leetcode 279. 完全平方数 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 Code def numSquares(self, n): # write your code here dp=[[0] for _ in range(n+1)]#dp[i]表示i最少被分成几个完全平方数之和 dp[0]=0#初始化 for i in range(1,n+1,1): j

vvv__vvv的博客 989

HWSD2.0土壤数据处理实战:从下载到属性提取全流程解析

本文详细解析了HWSD2.0全球土壤数据库从数据下载、属性筛选到GIS空间连接与提取的全流程实战方法。重点介绍了如何利用ArcGIS Pro等工具,将土壤单元编码与黏粒含量等属性表关联,最终生成全球土壤属性专题栅格图,为农业规划与生态研究提供关键数据支撑。

weixin_29214691的博客 610

基于YOLOv5的隧道衬砌缺陷智能检测系统

计算机视觉在工程检测领域正发挥越来越重要的作用,特别是目标检测技术通过深度学习算法实现了对复杂场景的智能分析。YOLOv5作为当前主流的目标检测框架,通过改进网络结构和训练策略,可以显著提升检测精度和效率。在隧道工程领域,结合通道注意力机制和多尺度特征融合技术,能够有效解决衬砌缺陷识别中的小目标检测难题。这种AI检测系统相比传统人工判读地质雷达图像,不仅将效率提升20倍,还能将识别准确率提高到92.3%,特别适用于3cm以上结构缺陷的自动化检测。系统通过深度可分离卷积等优化,实现了模型轻量化,便于在边缘计算

weixin_29064103的博客 326

279. 完全平方数【LeetCode DP】

题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 思路 标签:动态规划 首先初始化长度为n+1的数组dp,每个位置都为0 如果n为0,则结果为0...

qq_29295351的博客 331

【PX4学习笔记】1. ROS及PX4环境搭建

环境 Ubuntu18.04 安装教程参考 https://www.guyuehome.com/8983 安装过程中问题的解决 问题1 rosdep init 错误的终极解决方法 注意etc/下的ros和rostep文件夹要自己建 问题2 Ubuntu安装ROS报错 sudo: rosdep:找不到命令 问题3(更好地解决了问题1、2)【推荐】 解决GitHub的raw.githubusercontent.com无法连接问题 问题4:GeographicLib的安装 教程中安装GeographicLib d

【人工智障 | 计算鸡视觉 | 机器孩】 8233

Leetcode 279. 完全平方数 C++

Leetcode 279. 完全平方数 题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 测试样例 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 题解 动态规划 令dp[i]表示组成i的完全平方数的最少个数。我们思考一下转移方程 对于组成i的完全平方数的最少个数肯定是一个数的完全平方数的最少个数

weixin_43750513的博客 511

3D LUT Color Conversion之总体架构设计之三

摘要:本文提出了一种基于三维坐标一维化寻址的四面体网格编码方法。通过定义全局网格坐标P(R,G,B)=R+9G+81B和局部增量(ξ,η,ζ)∈{0,1},推导出偏移量Δ(ξ,η,ζ)=ξ+9η+81ζ的平移不变性质。该方法将6种坐标排序情况(Case)对应的固定偏移量三元组预先存储,其中V0和V3的偏移量恒定为0和91。硬件实现时只需根据Case选择对应常量组,无需实时计算坐标,显著提高了处理效率。该方案利用线性寻址公式的特性,确保相同局部结构在不同位置具有一致的偏移模式。(149字)

大熊 48

二极管钳位电路、限幅电路和检波电路Multisim电路仿真

本文系统介绍了二极管钳位、限幅和检波三种基础电路的工作原理及Multisim仿真验证。钳位电路通过电容-二极管配合实现波形整体平移,将波峰或波谷固定在指定电压;限幅电路利用二极管导通特性削除信号超出设定阈值的部分;检波电路则通过半波整流和电容滤波从调幅波中提取音频信号。三种电路均通过Multisim仿真验证了理论分析结果,展示了二极管在信号处理中的关键作用。这些基础电路广泛应用于信号调理、电平保护和通信解调等领域。

XU157303764的博客 1122

leetcode题解279-完全平方数

问题描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 示例 1: 输入:n = 12 输出:3 解释:12 = 4 + 4 + 4 示例 2: 输入:n = 13 输出:2 解释:13 = 4 +

Java硬件工程师的博客 644

灰色预测GM(1,n)模型_python

灰色系统理论及其应用系列博文: 一、灰色关联度分析法(GRA)_python 二、灰色预测模型GM(1,1) 文章目录一、GM(1,n)算法二、示例2.1 数据:2.2 代码_使用GM(1,n)城市用水总量2.3 结果分析 一、GM(1,n)算法 二、示例 注:数据均来自论文《基于灰色系统理论的贵阳市城市用水总量预测》 2.1 数据: data.csv 年份,城区人口,建成区面积,供水总量,用水人口,人口综合用水指标,城市用水总量 2002, 191.85, 98.00, 26396.00,

qq_34229228的博客 1万+

刷题笔记50——完全平方数(LeetCode279)

文章目录题目描述解析 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。LeetCode279 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 解析 Q:会不会没有解? 并不会...

优快云_dzh的博客 494

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LeetCode刷题笔记:279.完全平方数

LeetCode刷题笔记

hutianle的博客 560

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【LeetCode刷题笔记(四十六)】之 279.完全平方数

本文章由公号【开发小鸽】发布!欢迎关注!!! 老规矩–妹妹镇楼: 一. 题目 (一) 题干        给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 (二) 示例 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 二. 题解 (一) 思路 &n

开发小鸽 357

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode刷题复盘笔记—一文搞懂完全背包之279. 完全平方数问题(动态规划系列第十五篇)

LeetCode刷题复盘笔记—一文搞懂完全背包之279. 完全平方数问题(动态规划系列第十五篇)

Lucky_Alan_Gareth的博客 308

Leetcode 刷题笔记1 动态规划part06

由于本题所求为最少零钱数所以递推公式中应该为dp[ j ] = min(dp[ j ], dp[ j - coin] + 1)

pinglejun的博客 718

Leetcode刷题笔记(c++)_热题 HOT 100_279. 完全平方数

大厂大厂我来,leetcode刷题

LW_12345的博客 183

力扣完全平方数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完全平方数题解摘要 本文解析了LeetCode第279题"完全平方数",提供了动态规划和数学方法两种解题思路。动态规划解法通过构建dp数组,记录每个数所需的最小平方数数量;数学方法则利用四平方和定理。文章包含C#、Python、C++三种实现代码,并对比了性能(C++最快44ms,Python最慢148ms)。核心知识点包括动态规划状态转移方程和数学定理应用,适合中等水平算法学习者。常见错误提示和处理方法有助于避免解题陷阱,相关题目推荐扩展了学习范围。

qq_40263592的博客 1537

力扣279-完全平方数(Java详细题解)

因为选择了i * i作为物品,所以我们要知道选择i * i之前的背包容量所能装的最少物品数量,然后选择了这个物品,那我们的物品数量就会加1。唯一不同的就是物品不一样,零钱兑换是把物品数量什么的都给出来了,该题的物品没给出来,需要我们自己创建。因为我初始化为最大的数值,其他的数肯定小于等于它,当我递推出一个比它小的值时,就能覆盖这个最大值,不影响我递推的值。本题是求最小值,如果我将非0下标也初始化为0,那么我初始化的0就会将我递推出来的最小值覆盖,最后得出来为0。所以我物品的排列组合是不影响我dp数组的。

2302_79761426的博客 1273

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

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

Janium的博客 1039

力扣题解 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的博客 412

力扣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
上一篇: (刷题笔记) 1306. 跳跃游戏 III
下一篇: (刷题笔记) Leetcode 207. 课程表
Lucky&Happy
博客等级 码龄10年 1粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值