代码随想录刷题day30

1、零钱兑换II

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。

假设每一种面额的硬币有无限个。 

题目数据保证结果符合 32 位带符号整数。

感悟:总结一个递推公式,完全背包求解背包获得最大价值的递推公式为:dp[i][j] = max(dp[i - 1][j], dp[i][j - weight[i]] + value[i]),而装满背包的递推公式为:dp[i][j] = dp[i - 1][j] + dp[i][j - nums[i]]。

class Solution {public int change(int amount, int[] coins) {if(coins.length == 0) return 0;int len = coins.length;int[][] dp = new int[len][amount+1];for(int j=coins[0];j<=amount;j++){if(j%coins[0] == 0) dp[0][j] = 1;}for(int i=0;i<len;i++){dp[i][0] = 1;}for(int i=1;i<len;i++){for(int j=0;j<=amount;j++){if(j < coins[i]){dp[i][j] = dp[i-1][j];}else{dp[i][j] = dp[i-1][j] + dp[i][j-coins[i]];}}}return dp[len-1][amount];}
}

2、组合总和 Ⅳ

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

感悟:本题的特殊之处在于,顺序不同的序列当做不同的组合,对于这种强调顺序的情况,适用于用一维动态数组,遍历顺序需要有不一样的调整。如果求组合数就是外层for循环遍历物品,内层for遍历背包如果求排列数就是外层for遍历背包,内层for循环遍历物品

class Solution {public int combinationSum4(int[] nums, int target) {int len = nums.length;if(len == 0) return 0;int[] dp = new int[target+1];dp[0] =1;for(int j=0;j<=target;j++){for(int i=0;i<len;i++){if(j >= nums[i]) {dp[j] += dp[j-nums[i]];}}}return dp[target];}
}

3、零钱兑换

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。

感悟:典型的完全背包问题,dp[i]定义为凑成金额i时,所需要的最少硬币的个数,递推公式为:dp[i] = min(dp[i],dp[i-coins[j]]+1),为了满足求最少的要求,需要初始化为dp数组为一个大的值

class Solution {public int coinChange(int[] coins, int amount) {int max = Integer.MAX_VALUE;int[] dp = new int[amount+1];for(int i=0;i<amount+1;i++){dp[i] = max;}dp[0] = 0;for(int i=0;i<coins.length;i++){for(int j=coins[i];j<=amount;j++){if(dp[j-coins[i]] != max){dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);}}}return dp[amount] == max ? -1 : dp[amount];}
}

4、完全平方数

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

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

感悟:背包为n,物品为完全平方数,完全平方数为每个整数平方所得。这样和上题很类似。

class Solution {public int numSquares(int n) {int max = Integer.MAX_VALUE;int[] dp = new int[n+1];for(int i=0;i<n+1;i++){dp[i] = max;}dp[0] = 0;for(int i=1;i<=n;i++){for(int j=i*i;j<=n;j++){dp[j] = Math.min(dp[j],dp[j-i*i]+1); }}return dp[n];}
}

5、单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

感悟:字符串顺序是固定的,所以这是一个排列问题,遍历顺序需要先遍历背包(这里的字符串s)再遍历物品(字符串列表)。

class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp = new boolean[s.length()+1];dp[0] = true;for(int i=1;i<=s.length();i++){for(String word : wordDict){int len = word.length();if(i>=len && dp[i-len] && s.substring(i-len,i).equals(word)){dp[i] = true;break;}}}return dp[s.length()];}
}

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

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

相关文章

SpringBoot EhCache 缓存

一、EhCache核心原理 层级存储 堆内缓存&#xff08;Heap&#xff09;&#xff1a;高速访问&#xff0c;受JVM内存限制堆外缓存&#xff08;Off-Heap&#xff09;&#xff1a;突破JVM堆大小限制&#xff08;直接内存&#xff09;磁盘存储&#xff08;Disk&#xff09;&#xff…

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…

数据通信与计算机网络——数据与信号

主要内容 模拟与数字 周期模拟信号 数字信号 传输减损 数据速率限制 性能 注&#xff1a;数据必须被转换成电磁信号才能进行传输。 一、模拟与数字 数据以及表示数据的信号可以使用模拟或者数字的形式。数据可以是模拟的也可以是数字的&#xff0c;模拟数据是连续的采用…

循环语句之while

While语句包括一个循环条件和一段代码块&#xff0c;只要条件为真&#xff0c;就不断 循环执行代码块。 1 2 3 while (条件) { 语句 ; } var i 0; while (i < 100) {console.log(i 当前为&#xff1a; i); i i 1; } 下面的例子是一个无限循环&#xff0c;因…

蓝桥杯第十届国B 质数拆分

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 将 2019 拆分为若干个两两不同的质数之和&#xff0c;一共有多少种不同的方法&#xff1f; 注意交换顺序视为同一种方法&#xff0c;例如 220172019 与 201722019 …

曼昆《经济学原理》第九版 第十二章税收制度的设计

一、税收基本概念 税收分类&#xff1a; 比例税&#xff1a;税率不随税基变化&#xff08;如部分增值税&#xff09;累进税&#xff1a;税率随税基增加而上升&#xff08;如个人所得税&#xff09;累退税&#xff1a;税率随税基增加而下降&#xff08;如社会保险税上限&#…

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…

IDC智能机房整体解决方案

该文档为 IDC 智能机房整体解决方案,目标是实现机房智能化、可视化、远程化管理,提升运维效率与客户服务能力。方案涵盖物理安全智能化(智能电子锁,支持远程控制、权限管理及离线 / 在线授权,兼容 1-3mm 门板厚度等)、监控智能化(人员定位、摄像头、机柜温湿度监控、能耗…

Kafka入门-集群基础环境搭建(JDK/Hadoop 部署 + 虚拟机配置 + SSH 免密+Kafka安装启动)

Kafka 简介 传统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff0c;应用于大数据实时处理领域。 Kafka最新定义&#xff1a;Apache Kafka是一个开源分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用…

【仿生机器人】建模—— 图生3D 的几个办法

两件事&#xff01; 第一件&#xff1a; 强如 Gemini&#xff0c;在多模态和三维空间的理解中&#xff0c;如果不微调去做下游应用&#xff0c;直接 Zero-shot 的 效果是很差的 好处是有多视角图生3D&#xff0c;效果还可以&#xff0c;但是也没有很精细&#xff0c;&#xf…

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df

modelscope下载gguf格式模型

modelscope下载gguf格式模型 ollama加载模型 模型地址 https://www.modelscope.cn/models/okwinds/CompassJudger-1-7B-Instruct-GGUF-V3-LOT pip install modelscope modelscope download --modelokwinds/CompassJudger-1-7B-Instruct-GGUF-V3-LOT --include "CompassJ…

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…

解决Excel词典(xllex.dll)文件丢失或损坏问题的终极指南:从基础到高级修复技巧

在日常使用Microsoft Excel的过程中&#xff0c;许多用户可能会遇到一个令人沮丧的问题&#xff1a;Excel词典文件xllex.dll丢失或损坏。这不仅会影响到Excel的正常功能&#xff0c;还可能导致数据处理效率的降低。在这篇文章中&#xff0c;我们将深入探讨这一问题的原因&#…

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…

第11篇:数据库中间件系统可配置化设计与动态规则加载机制

11.1 引言&#xff1a;为什么需要可配置化&#xff1f; 数据库中间件在企业级环境中往往需要支持多租户、多业务场景、多数据库后端&#xff0c;因此固定逻辑会迅速过时或僵化。 为了提升 灵活性、可扩展性、部署效率&#xff0c;中间件系统亟需实现&#xff1a; ✅ 高度可配置…

C++信号处理程序解析与改进

这个程序演示了如何使用sigaction来捕获和处理信号&#xff08;特别是SIGINT&#xff0c;即CtrlC&#xff09;。以下是关键点和潜在问题的分析&#xff1a; 程序功能 信号捕获&#xff1a;注册自定义处理函数handler来捕获信号2&#xff08;SIGINT&#xff0c;通常由CtrlC触发…

Go爬虫开发学习记录

Go爬虫开发学习记录 基础篇&#xff1a;使用net/http库 Go的标准库net/http提供了完善的HTTP客户端功能&#xff0c;是构建爬虫的基石&#xff1a; package mainimport ("fmt""io""net/http" )func fetchPage(url string) string {// 创建自定…

ubuntu 系统分区注意事项

ubuntu 系统分区大小&#xff0c;注意事项&#xff1a; 安装ubuntu系统时&#xff0c;需要进行分区&#xff0c;手动分区时&#xff0c;有一点需要注意。一开始我也没有注意&#xff0c;长时间使用后才发现的问题。 需要注意一点&#xff0c;如果不对 /usr 进行单独分区&…