代碼隨想錄刷題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
繁體地址,請注明出處:http://hk.pswp.cn/web/83094.shtml
英文地址,請注明出處:http://en.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 進行單獨分區&…