leetcode hot100 完全平方数

news2024/12/27 13:24:04

在这里插入图片描述
本题中,是给一个整数n,让用完全平方数凑出这个整数,注意,题中给了n的范围,是大于等于1的,也就是说,dp[0]我们可以先不考虑。

整个问题可以抽象成完全背包问题的变形形式,物品就是这一个个的完全平方数,也就是i的平方,而背包的容量就是n。我们可以多次使用同一个物品来填充这个背包,直到这个背包被填满。

所以,dp[j]就表示填满容量为j的背包所需要的最少的物品的数目。
那么我们的递推公式应该就是dp[j] = Math.min(dp[j],dp[j-i*i]+1)。
因为我们之前是通过dp[j-coins[i]]+1得到的dp[j],就是表示先凑满容量为j-coins[i]所需要的最少物品个数,而coins[i]就是第i个物品。而在本题中,第i个物品则是i的完全平方数,即i*i。

初始化:dp[0]应该初始化成0,因为题中n的范围是大于等于1的,为了一直能求最小值,我们dp[0]应该初始化成0。之后其他的都应该初始化成整形的最大值,才能防止计算值被覆盖。

因为本题是要求的最少个数,并不是排列数也不是组合数,所以采取什么遍历方式都可以,一般采取先物品,再背包。并且本题是完全背包问题,即物品可以重复使用,所以内层遍历背包的时候应该正序遍历。

打印数组

class Solution {
    // 版本一,先遍历物品, 再遍历背包
    public int numSquares(int n) {
        int max = Integer.MAX_VALUE;
        int[] dp = new int[n + 1];
        //初始化
        for (int j = 0; j <= n; j++) {
            dp[j] = max;
        }
	//如果不想要寫for-loop填充數組的話,也可以用JAVA內建的Arrays.fill()函數。
	//Arrays.fill(dp, Integer.MAX_VALUE);
	
        //当和为0时,组合的个数为0
        dp[0] = 0;
        // 遍历物品
        for (int i = 1; i * i <= n; i++) {
            // 遍历背包
            for (int j = i * i; j <= n; j++) {
                //if (dp[j - i * i] != max) {
                    dp[j] = Math.min(dp[j], dp[j - i * i] + 1);
                //}
		//不需要這個if statement,因爲在完全平方數這一題不會有"湊不成"的狀況發生( 一定可以用"1"來組成任何一個n),故comment掉這個if statement。
            }
        }
        return dp[n];
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1461682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

免费听歌软件,音乐搜索APP:掌中的音乐宝库,为您的音乐生活增添色彩

引言 在数字音乐的浪潮中&#xff0c;我们通常会想到QQ音乐、虾米、网易云音乐等主流平台APP。然而&#xff0c;这些商业软件在为用户提供服务的同时&#xff0c;也不可避免地伴随着一些限制和不尽如人意的地方&#xff0c;如曲库有限、音质不尽如人意或广告干扰或会员才能听歌…

TypeScript中的keyof、typeof、in

概览 TypeScript中的keyof、typeof、in在我们日常工作中经常用到&#xff0c;但也容易遗忘&#xff0c;现详细梳理其用法及使用场景 一. 抛出问题 const getFormatData (initData) > { const data [];// 部分字段取值需保留小数点后两位const formatKeys [priceUntax…

频段划分学习射频知识的意义

一、射频电路设计与低频电路设计的不同点 随着频率提高&#xff0c;相应电磁波的波长与变得可与分立电路元件的尺寸相比拟时&#xff0c;电阻、电容和电感这些元件的电响应&#xff0c;将偏离他们的理想频率特性。以 WIFI 2.4G 频段为例&#xff0c;当频率为 2437MHz&#xff0…

年收入 100 万,不敢生孩子

原文连接&#xff1a; 年收入 100 万&#xff0c;不敢生孩子 今日热帖&#xff0c;有网友发帖称&#xff1a;互联网大头兵夫妇&#xff0c;两个人都 30 了&#xff0c;老公 xhs 后端年包 80&#xff0c;我私企年薪 20 左右&#xff0c;老家三线城市有房。 本来今年要孩子了&am…

花了钱的ChatGPT4.0在绘画方面的能力如何?Sora也能work吗

花了钱的ChatGPT4.0在绘画方面的能力如何&#xff1f;Sora也能work吗 关注微信公众号 DeepGoAI 计算机杂谈及深度学习记录&分享 众所周知 AI绘图是4.0收费的一大卖点 网上也有许多反复训练ChatGPT的段子视频 让人工智能无语 网友直呼 “未来人工智能统治世界了&…

016—pandas 分析近100年圣诞节日期分布

需求&#xff1a; 利用Pandas 分析近100年圣诞节的星期分布&#xff0c;目的是知道圣诞节都在星期几&#xff0c;哪个星期多些。 思路&#xff1a; 用 pd.date_range 生成 100 年日期数据 筛选出12月25日的所有日期 将日期转换为星期几 统计重复值的数量 绘图 二、…

【JAVA高级面试题】运用锁机制实现一个自定义的阻塞队列

文章目录 前言实战演示写在最后 前言 前几天看见一个高级Java面试题&#xff0c;我觉得很有代表意义。既考察了面试者的基本锁机制运用&#xff0c;也了解了阻塞队列的产生实现原理。先分享出来&#xff0c;以供鉴赏。 面试题&#xff1a;实现一个自定义的阻塞队列&#xff0c…

【C++语法基础】4.分支和循环结构(✨新手推荐阅读)

前言 在C编程中&#xff0c;分支和循环结构是控制程序流程的基本工具。分支结构允许程序根据特定条件执行不同的代码块&#xff0c;而循环结构则允许程序重复执行某个代码块。 分支结构 if 语句 if 语句是最基本的分支结构&#xff0c;它根据条件的真假来决定是否执行某段代…

Linux实验记录:使用LNMP架构部署动态网站环境

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; LNMP动态网站部署架构是一套由&…

Linux 性能分析工具汇总

Linux 性能分析工具汇总 出于对Linux操作系统的兴趣&#xff0c;以及对底层知识的强烈欲望&#xff0c;因此整理了这篇文章。本文也可以作为检验基础知识的指标&#xff0c;另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识&#xff0c;网络知识和操作系统知识…

(done) 两个矩阵 “相似” 是什么意思?

参考视频&#xff1a;https://www.bilibili.com/video/BV1zu411673J/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 参考资料&#xff1a;https://baike.baidu.com/item/%E7%9B%B8%E4%BC%BC%E7%9F%A9%E9%98%B5/10369874?frge_a…

离线环境解决IDEA连接数据库报需下载驱动的问题 Download missing driverfiles

去外网电脑上把这个目录下的MySQL ConnectorJ文件夹整体拷贝的内网电脑上就ok了&#xff01; C:\Users\like12\AppData\Roaming\JetBrains\IntelliJIdea2021.2\jdbc-drivers 参考&#xff1a;IDEA Download missing driver files 下载失败解决方法-CSDN博客

开发一款招聘小程序需要具备哪些功能?

随着时代的发展&#xff0c;找工作的方式也在不断变得简单&#xff0c;去劳务市场、人才市场的方式早就已经过时了&#xff0c;现在大多数年轻人都是直接通过手机来找工作。图片 找工作类的平台不但能扩大企业的招聘渠道&#xff0c;还能节省招聘的成本&#xff0c;方便求职者进…

7. Qt添加滑动条

前言&#xff1a; 添加一个这样的滑条&#xff0c;双方关联自动修改,也提供代码创建方式 技能&#xff1a; QSpinBox QSlider 方式一 Qt 的图形化编程&#xff08;用ui文件&#xff0c;非常简单&#xff09; 1.Spin Box 首先找到显示数字的这个部分。是input widget->sp…

useGeneratedKeys=“true” keyProperty=“id”

useGeneratedKeys“true” keyProperty“id” 这个注解在xml文件的insert方法中&#xff0c;可以用于返回主键值&#xff1b; 并且useGeneratedKeys参数只针对 insert 语句生效&#xff0c;默认为 false&#xff1b;

【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 1.题目链接&#xff1a; 无 2.详解思路&#xff1a; 题目描述&#xff1a;输入两个正整数&#xff0c;输出其最大公因数和最小公倍数 一般方法&#xff1a;最大公因数&#xff1a;穷加法&#xff1b;最小公倍数&…

小迪安全29WEB 攻防-通用漏洞SQL 注入增删改查盲注延时布尔报错

#知识点&#xff1a; 1、明确查询方式注入 Payload 2、明确查询方式注入产生功能 3、明确 SQL 盲注延时&布尔&报错 #详细点&#xff1a; 盲注就是在注入过程中&#xff0c;获取的数据不能回显至前端页面。 也就是在代码中无echo将sql结果输出出来 此时&#…

Android---Jetpack Compose学习004

CompositionLocal 通常情况下&#xff0c;在 Compose 中&#xff0c;数据以参数形式向下流经整个界面树传递给每个可组合函数。但是&#xff0c;对于广泛使用的常用数据&#xff08;如颜色或类型样式&#xff09;&#xff0c;这可能会很麻烦。 为了支持无需将颜色作为显式参数…

stm32学习总结 FMC 驱动LCD

1&#xff0c; 显示器分类&#xff08;了解&#xff09; 全彩显示&#xff0c;LCD具有更多的优势&#xff0c;适合在单片机上使用 2&#xff0c; LCD简介&#xff08;了解&#xff09; Liquid Crystal Display&#xff0c;即液晶显示器&#xff0c;由&#xff1a;玻璃基板、背…

宝塔面板-安装与卸载

宝塔面板&#xff08;BT Panel&#xff09;是一款在互联网上广泛使用的服务器管理软件&#xff0c;它以其简洁的界面和强大的功能受到了许多站长的喜爱。通过宝塔面板&#xff0c;用户可以轻松地管理服务器上的网站、数据库、FTP、邮箱等服务。本文将详细介绍宝塔面板的安装与卸…