【力扣】完全平方数

一、题目描述

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 104

题目链接:

. - 力扣(LeetCode)

二、解题思路(完全背包)

我们可以将该问题转化为完全背包问题。

题目要求:给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。可以转化为求从1、4、9、16......完全平方数中,挑选和为n,所有的选法中,数字数量最小值(可见跟完全背包,要求背包装满的情况一样)。

1、状态表示

dp[i]表示:和为 i 的完全平方数的最少数量。

2、状态转移方程
对于 dp[i], 我们可以根据小于等于 i 的所有完全平方数 x 进行 划分:
  • x = 1 时,最小数量为: 1 + dp[i - 1]
  • x = 4 时,最小数量为: 1 + dp[i - 4] ......
⼀直枚举到 x <= i 为止。
为了方便枚举完全平方数,我们采用下面的策略: for(int j = 1; j * j <= i; j++)
综上所述,状态转移方程为:
dp[i] = min(dp[i], dp[i - j * j] + 1)
3、初始化
当 n = 0 的时候,没法拆分,结果为 0 ;
当 n = 1 的时候,显然为 1.
4、填表顺序
从左往右。
5、返回值
根据题意,返回 dp[n] 的值。

三、 代码

class Solution {public int numSquares(int n) {//创建dp表int[] dp = new int[n+1];//初始化dp[1] = 1;//填表// 枚举每个数for(int i = 2; i <= n; i++) {dp[i] = 1 + dp[i - 1]; // ⾄少等于 1 + dp[i - 1]for(int j = 2; j * j <= i; j++) {// ⽤⼩于 i 的完全平⽅数划分区间dp[i] = Math.min(dp[i], dp[i - j * j] + 1); // 拿到所有划分区间内的}}// 返回结果return dp[n];}
}

另一种更优的代码:

class Solution {public int numSquares(int n) {int m = (int)Math.sqrt(n);int INT = 0x3f3f3f;//创建dp表int[] dp = new int[n+1];//初始化dp[0] = 0;for(int j = 1; j <= n; j++) {dp[j] = INT;}//填表for(int i = 1; i <= m; i++) {for(int j = i*i; j <= n; j++) {dp[j] = Math.min(dp[j], dp[j-i*i]+1);}}return dp[n];}
}

 

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

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

相关文章

unity使用XR插件开发SteamVR项目,异常问题解决方法

一、unity使用XR插件开发SteamVR项目&#xff0c;运行后相机高度异常问题解决方法如下操作 &#xff08;一&#xff09;、开发环境 1、Unity 2021.3.15f 2、XR Interaction Toolkit Version 2.5.2 &#xff08;com.unity.xr.interaction.toolkit&#xff09; 3、OpenXR Pl…

Spring MVC 架构详解

Spring MVC&#xff08;Model-View-Controller&#xff09;是 Spring 框架中用于构建 Web 应用程序的模块。它通过分离应用程序的不同方面&#xff08;输入逻辑、业务逻辑和 UI 逻辑&#xff09;来简化开发工作。本文将详细介绍 Spring MVC 架构及其基本组件&#xff0c;包括 D…

Nature子刊 | 基于遥感和U-Net绘制6亿棵树木,并发现过去十年印度农田树木严重减少

题目:Severe decline in large farmland trees in India over the past decade 期刊:Nature Sustainability 论文:https://www.nature.com/articles/s41893-024-01356-0 结果数据: https://rs-cph.projects.earthengine.app/view/tree https://zenodo.org/records/10978…

Arduino - Keypad 键盘

Arduino - Keypad Arduino - Keypad The keypad is widely used in many devices such as door lock, ATM, calculator… 键盘广泛应用于门锁、ATM、计算器等多种设备中。 In this tutorial, we will learn: 在本教程中&#xff0c;我们将学习&#xff1a; How to use key…

VUE大屏的开发过程(纯前端)

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;工作多年做过各类项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论和学习的问题可联系我&#xff1a;1…

tauri使用github action实现跨平台编译并解决编译错误等问题

正常编译为跨平台结果就像上面的&#xff0c;有mac/windows/linux的安装程序&#xff0c;直接下载就可以安装使用&#xff0c;我的这个livebox桌面端仓库地址&#xff1a;GitHub - Sjj1024/LiveBox: livebox&#xff0c;里面有编译文件可以参考。今天主要讲一下遇到的问题。 官…

一投就中,收稿范围大,1个月内录用,国人发文最多,无风险预警

别人费心费力投个一年都不一定有结果&#xff0c;您直接坐上”直升飞机”&#xff0c;1个月录用。下面老毕分享1本超快录用EI期刊&#xff0c;工程电气方向的学者抓紧投稿。 抢占版面&#xff0c;下方【扫一扫】直接安排&#xff0c;1个月内录用&#x1f308; Journal of Elect…

快递大件多少算超重物品?

在快递大件物品时&#xff0c;我们经常听到“超重”这个词&#xff0c;但究竟多重才算超重呢&#xff1f;今天&#xff0c;就让我们来探讨一下快递大件的超重标准&#xff0c;以及如何更经济地快递这些超重物品。 1. 祺祺寄快递&#xff1a; “祺祺寄快递”是一个便捷的快递服…

一款go build命令增强工具

项目地址&#xff1a;【GitHub - gvcgo/gobuilder: An enhancement for official <go build>.】 类别&#xff1a;Go 项目标题&#xff1a;一款go build命令增强工具 项目描述&#xff1a;在使用go做跨平台项目时&#xff0c;往往需要手动写脚本来实现跨平台编译。这款…

整合Spring Boot和Pulsar实现可扩展的消息处理

整合Spring Boot和Pulsar实现可扩展的消息处理 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代分布式系统中&#xff0c;消息队列是实现异步通信和解耦…

线程的创建(二)

通过Runnable接口实现多线程 在开发中&#xff0c;我们应用更多的是通过Runnable接口实现多线程。这种方式克服了继承Thread类的特点&#xff0c;即在实现Runnable接口的同时还可以继承某个类。 从源码角度看&#xff0c;Thread类也是实现了Runnable接口&#xff0c;Runnable…

在开发板上抓包的方法

1.tcpdump tcpdump -i lo -s0 -w /user/lo.pcap tcpdump: 启动 tcpdump 工具&#xff0c;用于捕获网络数据包。-i lo: 指定监听的网络接口为 lo&#xff0c;这里的 lo 是本地回环接口&#xff08;loopback interface&#xff09;&#xff0c;用于本机内部通信。-s0: 设置抓取…

小程序常用标签

在微信小程序开发中&#xff0c;常用的标签有很多&#xff0c;这些标签用于构建页面结构、呈现内容和实现交互效果。以下是一些常见的小程序标签及其主要作用&#xff1a; 基础视图标签 view: 视图容器&#xff0c;类似于 <div>&#xff0c;用于包裹视图层的结构。 tex…

绿盟又行了,漏管市场占有率第一

漏洞管理平台 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 今天看到不少朋友圈在转发&#xff…

使用Python实现深度学习模型通常涉及以下几个步骤

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

酒的生物化学成分与生理学功能?

酒的生物化学成分与生理学功能&#xff1f; 李升伟 酒是一种含有多种化学成分的混合物&#xff0c;其主要成分是酒精&#xff0c;也就是乙醇。除了酒精和水之外&#xff0c;酒中还含有酸、酯、醛、醇等多种类型的化学物质。这些化学成分的含量和比例对于酒的质量和风味有着重…

Java 优雅的随机选取数组N个不重复的元素(下标)

文章目录 前言一、不优雅的做法二、优雅的做法前言 在处理Java集合时,我们经常遇到需要从一个数组或列表中随机选取N个不重复元素的场景。本文将介绍两种处理这一需求的方法:一种较为直接但不够优雅的方法,以及一种更加简洁优雅的方法。 一、不优雅的做法 最直接的方法可能…

亚马逊测评干货分享:跨境卖家店铺测评技巧

测评在亚马逊、etsy、temu、速卖通、vinted、ebay、allegro、Jumia、Fruugo、敦煌、shopee、ozon、阿里国际站、沃尔玛、newegg等跨境平台中扮起着重要的方式&#xff0c;卖家们了解到测评可以快速增加产品的销量、评论数量&#xff0c;提升排名&#xff0c;从而打造爆款产品。…

Python基于逻辑回归分类模型、决策树分类模型、随机森林分类模型和XGBoost分类模型实现乳腺癌分类预测项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在当今医疗健康领域&#xff0c;乳腺癌作为威胁女性健康的主要恶性肿瘤之一&#xff0c;其早期诊断与精…

Ollama qwen2:7b

简介 一个简明易用的本地大模型运行框架&#xff0c;Ollama官网&#xff1a;Ollama ollama命令 ollama有类似docker的命令。下面是一些模型(large language models)的操作命令: ollama list&#xff1a;显示模型列表ollama show&#xff1a;显示模型的信息ollama pull&#…