当前位置: 首页 > news >正文

2025年- H81-Lc189--279.完全平方数(动态规划)--Java版

1.题目描述

在这里插入图片描述

2.思路

(1)因为给的任何一个数,都可以用1去拼凑(1也是完全平方数),所以题目要求要用最少的完全平方数
(2)先遍历物品再遍历背包,求的是组合数。
先遍历背包再遍历物品,求的是排列数。
(3)但是这道题中 ,物品之间是没有顺序的。所以for循环可以颠倒。最外层循环遍历 1 到 n,而内层循环遍历所有小于等于 j 的完全平方数(大约是 sqrt(j) 次)。因此,时间复杂度大约是 O(n * sqrt(n))。
在这里插入图片描述
构建 dp 数组时,dp[0] = 0 的意思是:为了表示数字 0,我们不需要任何的平方数,这个是唯一的正确答案。也就是说,0 本身是一个完全平方数。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.代码实现

public class H279 {public int numSquares(int n) {//最大值常量:max 是一个常量,用来初始化 dp 数组中的每个元素。Integer.MAX_VALUE 是整型能表示的最大值,表示一个不可能的值,用来进行最小化更新。int max=Integer.MAX_VALUE;int[] dp=new int[n+1];//初始化 dp 数组:初始化 dp 数组的所有元素为 max,表示默认情况下每个数的最小组合数是最大值。// 这样做是为了确保在后续更新时,dp[j] 会被实际计算的最小值所覆盖。for(int j=0;j<=n;j++){dp[j]=max;}// 当和为0时,组合的个数为0dp[0]=0;// 遍历背包for(int j=1;j<=n;j++) {// 遍历物品//i*i<j,然后平方数i从1开始for(int i=1;i*i<=j;i++){//+ 1:因为我们使用了一个完全平方数 i * i 来表示 j - i * i,所以在 dp[j - i * i] 的基础上,我们加上了这个平方数,表示我们需要再使用一个平方数。dp[j]=Math.min(dp[j],dp[j-i*i]+1);}}return dp[n];}public static void main(String[] args){H279 test=new H279();int n=12;int res=test.numSquares(n);System.out.print(res);}
}

相关文章:

  • 学习日记-day27-6.11
  • leetcode_283.移动零
  • 选择与方法(4) 职场内篇 沿着赤道走,到不了北极,找准职场方向,建立可迁移技能
  • 各项目变更频繁时,如何保持整体稳定
  • 技术研究 | 一种检测大模型是否泄露训练数据的新方法
  • 【AI大模型入门指南】概念与专有名词详解 (一)
  • 雷卯针对易百纳EB-SS528-DC-175开发板防雷防静电方案
  • AI视频生成API:一站式视频生成解决方案
  • Java 语言特性(面试系列4)
  • 从0到1落地一个RAG智能客服系统
  • 加性同态加密的原理与函数解析
  • 运维之十个问题篇--3
  • PTA天梯赛L1 041-050题目解析
  • 239. 滑动窗口的最大值
  • C语言:指针进阶(下)
  • 从代码学习深度学习 - 全局向量的词嵌入(GloVe)PyTorch版
  • codeforces C. Devyatkino
  • 建筑末端配电回路安全用电解决方案:筑牢电气防火最后一道防线
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建AnythingLLM聊天助手
  • 边缘计算一:现代前端架构演进图谱 —— 从 SPA 到边缘渲染
  • 物流公司做网站/网络营销seo是什么意思
  • 在线详情页制作/seo发帖网站
  • 广州网站建设网站/深圳做网站的公司有哪些
  • 做网站界面多少钱/网络广告营销经典案例
  • 四川网络科技有限公司/seo关键词分类
  • 旅游网模板html代码/seo网站排名优化价格