代碼隨想錄算法訓練營第三十二天

LeetCode/卡碼網題目:

  • 518. 零錢兌換 II
  • 377. 組合總和 Ⅳ
  • 790. 多米諾和托米諾平鋪(每日一題)
  • 57. 爬樓梯(第八期模擬筆試)

其他:

今日總結
往期打卡


背包問題特點:

滾動數組背包遍歷順序

  • 完全背包從小到大,即基于當前物品更新過的繼續更新
  • 01背包從大到小,即基于上一物品更新

物品內外層循環:

  • 求組合數外層for循環遍歷物品,內層for遍歷背包。
    (物品順序固定,所以不會出現不同的排列)
  • 求排列數外層for遍歷背包,內層for循環遍歷物品。

518. 零錢兌換 II

跳轉: 518. 零錢兌換 II

學習: 代碼隨想錄公開講解

問題:

給你一個整數數組 coins 表示不同面額的硬幣,另給一個整數 amount 表示總金額。

請你計算并返回可以湊成總金額的硬幣組合數。如果任何硬幣組合都無法湊出總金額,返回 0

假設每一種面額的硬幣有無限個。

題目數據保證結果符合 32 位帶符號整數。

思路:

完全背包求組合數,外側物品,順序從小到大遍歷

復雜度:

  • 時間復雜度: O ( n m ) O(nm) O(nm)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼:

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

377. 組合總和 Ⅳ

跳轉: 377. 組合總和 Ⅳ

學習: 代碼隨想錄公開講解

問題:

給你一個由 不同 整數組成的數組 nums ,和一個目標整數 target 。請你從 nums 中找出并返回總和為 target 的元素組合的個數。

題目數據保證答案符合 32 位整數范圍。

在這里插入圖片描述

思路:

完全背包求排列數,外側背包,順序從小到大遍歷

復雜度:

  • 時間復雜度: O ( n m ) O(nm) O(nm)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼:

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

790. 多米諾和托米諾平鋪(每日一題)

跳轉: 790. 多米諾和托米諾平鋪

問題:

有兩種形狀的瓷磚:一種是 2 x 1 的多米諾形,另一種是形如 “L” 的托米諾形。兩種形狀都可以旋轉。

給定整數 n ,返回可以平鋪 2 x n 的面板的方法的數量。返回對 109 + 7 取模 的值。

平鋪指的是每個正方形都必須有瓷磚覆蓋。兩個平鋪不同,當且僅當面板上有四個方向上的相鄰單元中的兩個,使得恰好有一個平鋪有一個瓷磚占據兩個正方形。

在這里插入圖片描述

思路:

可以看作背包問題,1有1個,2有1個,3有2個,4有2個,從3中間插兩個橫牌是5,有兩個,4插兩個橫牌是6,有兩個,依此類推后面都有兩個
在這里插入圖片描述
這題就是完全背包求排列

也可以看作是爬樓梯

f ( n ) = f ( n ? 1 ) + f ( n ? 2 ) + ∑ m = 0 n ? 3 f ( m ) ? 2 f(n)=f(n-1)+f(n-2)+\sum_{m=0}^{n-3}f(m)*2 f(n)=f(n?1)+f(n?2)+m=0n?3?f(m)?2
求通項公式為
f ( n ) = 2 ? f ( n ? 1 ) + f ( n ? 3 ) f(n)=2*f(n-1)+f(n-3) f(n)=2?f(n?1)+f(n?3)

復雜度:

  • 時間復雜度: O ( n ) O(n) O(n)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼(遞推公式):

class Solution {private static final int MOD = 1_000_000_007;public int numTilings(int n) {if (n == 1) {return 1;}long[] f = new long[n + 1];f[0] = f[1] = 1;f[2] = 2;for (int i = 3; i <= n; i++) {f[i] = (f[i - 1] * 2 + f[i - 3]) % MOD;}return (int) f[n];}
}

復雜度:

  • 時間復雜度: O ( n 2 ) O(n^2) O(n2)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼(完全背包求組合):

class Solution {public int numTilings(int n) {int[] dp = new int[n+1];long MOD = 1000000007;dp[0] = 1;for(int i=1;i<=n;i++){for(int j=1;j<=2&&j<=n;j++)if(i>=j)dp[i]=(int)(((long)dp[i]+dp[i-j])%MOD);for(int j=3;j<=n;j++)if(i>=j)dp[i]=(int)(((long)dp[i]+2*dp[i-j])%MOD);}return dp[n];}
}

57. 爬樓梯(第八期模擬筆試)

跳轉: 57. 爬樓梯(第八期模擬筆試)

學習: 代碼隨想錄公開講解

問題:

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬至多m (1 <= m < n)個臺階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

思路:

完全背包求排列

復雜度:

  • 時間復雜度: O ( n m ) O(nm) O(nm)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼:

import java.util.Scanner;
class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] dp = new int[n+1];dp[0] = 1;for(int j=1;j<=n;j++)for(int i=1;i<=m;i++)if(j>=i)dp[j] += dp[j-i];System.out.println(dp[n]);}
}

總結

練習了完全背包問題和背包問題求排序組合

往期打卡

代碼隨想錄算法訓練營第三十一天

代碼隨想錄算法訓練營第三十天(補)

代碼隨想錄算法訓練營第二十九天

代碼隨想錄算法訓練營第二十八天

代碼隨想錄算法訓練營第二十七天(補)

代碼隨想錄算法訓練營第二十六天

代碼隨想錄算法訓練營第二十五天

代碼隨想錄算法訓練營第二十四天

代碼隨想錄算法訓練營第二十三天

代碼隨想錄算法訓練營周末四

代碼隨想錄算法訓練營第二十二天(補)

代碼隨想錄算法訓練營第二十一天

代碼隨想錄算法訓練營第二十天

代碼隨想錄算法訓練營第十九天

代碼隨想錄算法訓練營第十八天

代碼隨想錄算法訓練營第十七天

代碼隨想錄算法訓練營周末三

代碼隨想錄算法訓練營第十六天

代碼隨想錄算法訓練營第十五天

代碼隨想錄算法訓練營第十四天

代碼隨想錄算法訓練營第十三天

代碼隨想錄算法訓練營第十二天

代碼隨想錄算法訓練營第十一天

代碼隨想錄算法訓練營周末二

代碼隨想錄算法訓練營第十天

代碼隨想錄算法訓練營第九天

代碼隨想錄算法訓練營第八天

代碼隨想錄算法訓練營第七天

代碼隨想錄算法訓練營第六天

代碼隨想錄算法訓練營第五天

代碼隨想錄算法訓練營周末一

代碼隨想錄算法訓練營第四天

代碼隨想錄算法訓練營第三天

代碼隨想錄算法訓練營第二天

代碼隨想錄算法訓練營第一天

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904244.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904244.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904244.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第十六屆藍橋杯 2025 C/C++組 密密擺放

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 思路詳解: 發個牢騷&#xff1a; 代碼&#xff1a; 代碼詳解&#xff1a; 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; P12337 [藍橋杯 2025 省 AB/Python B 第二…

分析rand()和srand()函數的功能

rand()和srand()函數原型&#xff1a; int rand(void) 返回一個范圍在 0 到 RAND_MAX 之間的偽隨機數。 void srand(unsigned int seed)用來給rand() 設置隨機數發生器&#xff0c;隨機數發生器輸出不同的數值&#xff0c;rand() 就會生成不同的隨機數 1)、在“D:\Keil_v5\AR…

debuginfo詳解

debuginfo 是 Linux 系統中存儲調試符號和源代碼信息的特殊軟件包&#xff0c;用于分析內核或用戶態程序的崩潰轉儲文件&#xff08;如 vmcore、coredump&#xff09;。它在調試復雜問題&#xff08;如內核崩潰、程序段錯誤&#xff09;時至關重要。以下是其核心作用、安裝方法…

Python 爬取微店商品列表接口(item_search)的實戰指南

在電商數據分析、市場調研或競品分析中&#xff0c;獲取商品列表信息是常見的需求。微店作為知名的電商平臺&#xff0c;提供了豐富的商品資源和相應的 API 接口。本文將詳細介紹如何使用 Python 爬蟲技術&#xff0c;通過微店的 item_search 接口根據關鍵詞搜索商品列表&#…

【bazel】bazel簡介及簡單使用

文章目錄 1. What is bazel?2. bazel的核心原理2.1 bazel的構建模型2.2 bazel的核心概念2.3 bazel的關鍵特性 3. bazel的使用3.1 劃分項目結構3.2 編寫BUILD文件3.3 bazel常用命令3.4 bazel依賴管理 參考內容 1. What is bazel? bazel是一個開源的構建工具&#xff0c;它基于…

【Mytais系列】Myatis的設計模式

目錄 設計模式 1. 工廠模式&#xff08;Factory Pattern&#xff09; 2. 建造者模式&#xff08;Builder Pattern&#xff09; 3. 動態代理模式&#xff08;Dynamic Proxy Pattern&#xff09; 4. 模板方法模式&#xff08;Template Method Pattern&#xff09; 5. 策略模…

【unity游戲開發入門到精通——UGUI】Mask組件實現UGUI遮罩

注意&#xff1a;考慮到UGUI的內容比較多&#xff0c;我將UGUI的內容分開&#xff0c;并全部整合放在【unity游戲開發——UGUI】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言如何實現UI遮罩1、Mask組件2、實例3、注意 專欄推薦完結 前言 Mask遮罩是…

Github2025-05-04php開源項目日報 Top10

根據Github Trendings的統計,今日(2025-05-04統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量PHP項目10Shell項目1Vue項目1Java項目1ASP項目1SecLists - 安全測試人員的伴侶 創建周期:4375 天開發語言:PHP協議類型:MIT LicenseStar數量…

MyBatis 一對多與多對一映射詳解教程

一、基礎概念與場景 一對多&#xff08;One-to-Many&#xff09; ? 定義&#xff1a;一個父對象包含多個子對象。 例如&#xff1a;一個商品&#xff08;Goods&#xff09;對應多個商品詳情&#xff08;GoodsDetail&#xff09; ? 實體類表現&#xff1a;父類中包含 List&l…

ChatGPT:重塑人工智能交互范式的破曉之作

2022年11月30日,總部位于舊金山的研究公司OpenAI正式發布了ChatGPT——一款以病毒式傳播速度席卷全球的AI聊天機器人。它不僅能像人類一樣生成內容、回答問題和解決問題,更在推出后的兩個月內吸引了超過1億月活躍用戶,刷新了消費級技術應用的最快采用率紀錄。這一里程碑事件…

在項目中如何對Map List等對象序列化及反序列化

我們知道&#xff0c;在自定義類中&#xff0c;若想完成序列化必須要實現Serializable接口。 那么在實現后如何進行序列化呢&#xff1f; 一.普通對象 序列化&#xff1a; 1.首先我們要定義一個 序列化所需要的工具類 ObjectMapper //定義序列化所需要的工具類 轉化機器…

筆試專題(十五)

文章目錄 排序子序列題解代碼 消減整數題解代碼 最長公共子序列(二)題解代碼 排序子序列 題目鏈接 題解 1. 貪心 模擬 2. 1 2 3 2 2 應該是有兩個排列子序列的&#xff0c;所以i n-1時ret 3. 把水平的位置和上升部分&#xff0c;水平位置和下降部分分為一個排列子序列 代…

Amazon Bedrock Converse API:開啟對話式AI新體驗

Amazon Bedrock Converse API&#xff1a;開啟對話式AI新體驗 前言 在當今人工智能飛速發展的時代&#xff0c;對話式AI已成為眾多應用的核心組成部分。從智能客服到智能助手&#xff0c;對話式AI為用戶帶來了便捷且高效的交互體驗。而Amazon Bedrock Converse API的出現&…

【Springboot知識】Springboot計劃任務Schedule詳解

文章目錄 Spring Boot 定時任務從原理到實現詳解一、核心原理分析1. 架構分層2. 核心組件3. 線程模型 二、基礎實現步驟1. 添加依賴2. 主類配置3. 定時任務類 三、高級配置技巧1. 自定義線程池2. 動態配置參數3. 分布式鎖集成&#xff08;Redis示例&#xff09; 四、異常處理機…

MySQL:聯合查詢

目錄 一、笛卡爾積 ?二、內連接 三、外連接 &#xff08;1&#xff09;左外連接 &#xff08;2&#xff09;右外連接 &#xff08;3&#xff09;全外連接 四、自連接 五、子查詢 &#xff08;1&#xff09;單行子查詢 &#xff08;2&#xff09;多行子查詢 &…

深入理解 Cortex-M3 的內核寄存器組

每個 MCU 開發工程師一定都了解寄存器這個東西&#xff0c;以 STM32 為例&#xff0c;其擁有非常多的外設模塊&#xff0c;如串口、SPI、IIC 等等&#xff0c;如果要使用這些外設&#xff0c;使其按照我們的要求工作&#xff0c;就需要配置這些外設的寄存器&#xff0c;往這些寄…

網絡安全自動化:找準邊界才能筑牢安全防線

數字時代&#xff0c;企業每天要面對成千上萬的網絡攻擊。面對龐大的服務器群、分散的團隊和長期不重啟的設備&#xff0c;很多企業開始思考&#xff1a;哪些安全操作適合交給機器自動處理&#xff1f;哪些必須由人工把關&#xff1f;今天我們就用大白話聊聊這件事。 一、這些事…

C++負載均衡遠程調用學習之負載均衡算法與實現

目錄 01 lars 系統架構回顧 02 lars-lbAgentV0.4-route_lb處理report業務流程 03 lars-lbAgentV0.4-負責均衡判斷參數配置 04 lars-lbAgentV0.4-負載均衡idle節點的失敗率判斷 05 lars-lbAgentV0.4-負載均衡overload節點的成功率判斷 06 lars-lbAgentV0.4-負載均衡上報提交…

領略算法真諦: 多源bfs

嘿&#xff0c;各位技術潮人&#xff01;好久不見甚是想念。生活就像一場奇妙冒險&#xff0c;而編程就是那把超酷的萬能鑰匙。此刻&#xff0c;陽光灑在鍵盤上&#xff0c;靈感在指尖跳躍&#xff0c;讓我們拋開一切束縛&#xff0c;給平淡日子加點料&#xff0c;注入滿滿的pa…

雷電模擬器-超好用的Windows安卓模擬器

一、雷電模擬器介紹 雷電模擬器是一款功能強大的軟件&#xff0c;它能夠在電腦上模擬出安卓手機系統&#xff0c;讓你可以在電腦上運行各類手機應用及游戲。其采用虛擬安卓手機操作界面&#xff0c;為玩家帶來了獨特的體驗。 &#xff08;一&#xff09;強大的兼容性 雷電模擬…