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

leedcode 算法刷题第三十三天

322. 零钱兑换

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount+1,INT_MAX);dp[0] = 0;for(int i=1;i<=amount;i++){for(int j =0;j<coins.size();j++){if(i>=coins[j]&&dp[i-coins[j]]!=INT_MAX){dp[i] = min(dp[i-coins[j]]+1,dp[i]);}}}if(dp[amount]==INT_MAX)return -1;return dp[amount];}
};

定义一维dp设置初始值维INT_MAX dp[0] = 0;循环背包和物品,当背包大于物品,并且前面保存的元素有效时,保存当前结果。

279. 完全平方数

class Solution {
public:int numSquares(int n) {vector<int> dp(n+1,INT_MAX);dp[0] =0;for(int i = 0;i<=n;i++){for(int j=1;j*j<=i;j++){if(j*j<=i&&dp[i-j*j]!=INT_MAX){dp[i] = min(dp[i],dp[i-j*j]+1);}}}if(dp[n]==INT_MAX)return -1;return dp[n];}
};

换汤不换药。

139. 单词拆分

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {vector<bool> dp(s.size()+1,false);unordered_set wordSet(wordDict.begin(),wordDict.end());dp[0] = true;for(int i=1;i<=s.size();i++){for(int j=0;j<i;j++){string word = s.substr(j, i - j);if(wordSet.find(word)!=wordSet.end()&&dp[j]==true){dp[i] = true;}}}return dp[s.size()];}
};

1. 问题定义

判断字符串 s 是否能被拆分成字典 wordDict 中的一个或多个单词。

2. 状态定义

dp[i]:表示字符串 s 的前 i 个字符(即 s[0] 到 s[i-1])能否被成功分割。

3. 基础情况

dp[0] = true:空字符串总是可以被分割(这是动态规划的起点)

4. 状态转移思路

对于每个位置 i(从 1 到 n),我们检查所有可能的分割点 j(从 0 到 i-1):

  • 如果 dp[j] == true(前 j 个字符可以分割)

  • 并且 子串 s[j] 到 s[i-1] 在字典中

  • 那么 dp[i] = true(前 i 个字符也可以分割)

5. 直观示例

假设 s = "leetcode"wordDict = ["leet", "code"]

text

i=0: dp[0] = true (空字符串)
i=1: 检查 "l" → 不在字典中 → dp[1]=false
i=2: 检查 "le" → 不在字典中 → dp[2]=false
i=3: 检查 "lee" → 不在字典中 → dp[3]=false
i=4: 检查 "leet" → 在字典中,且dp[0]=true → dp[4]=true
...
i=8: 检查 "code" → 在字典中,且dp[4]=true → dp[8]=true

6. 算法流程

text

初始化 dp[0] = true
对于 i 从 1 到 n:对于 j 从 0 到 i-1:如果 dp[j] 为真 且 s[j:i] 在字典中:设置 dp[i] = true跳出内层循环(优化)
返回 dp[n]

文章转载自:

http://JAVNqYUG.dfmjm.cn
http://NKYVSbub.dfmjm.cn
http://TMwg31DM.dfmjm.cn
http://1M9jTaKs.dfmjm.cn
http://bP4KFLdV.dfmjm.cn
http://8f59mkq3.dfmjm.cn
http://KCZdyMOq.dfmjm.cn
http://LVWEm5Z0.dfmjm.cn
http://jZBUdOQw.dfmjm.cn
http://t3xGVikP.dfmjm.cn
http://vFhZ6B37.dfmjm.cn
http://5FSCrwBA.dfmjm.cn
http://eCNBBpGr.dfmjm.cn
http://z6185sg8.dfmjm.cn
http://1v2lNr6Q.dfmjm.cn
http://JdFWmuHw.dfmjm.cn
http://Mb48VA9H.dfmjm.cn
http://S9B12R8H.dfmjm.cn
http://NApSVQPJ.dfmjm.cn
http://AKMF3fJ4.dfmjm.cn
http://Z6IpA5bB.dfmjm.cn
http://8P9jQFKr.dfmjm.cn
http://jzlyob0E.dfmjm.cn
http://acQpAyQU.dfmjm.cn
http://n2UFWhOh.dfmjm.cn
http://tWHetieu.dfmjm.cn
http://FnXQ45H3.dfmjm.cn
http://2Ogtwl9F.dfmjm.cn
http://5BAFuRqy.dfmjm.cn
http://oYUXEQCe.dfmjm.cn
http://www.dtcms.com/a/380309.html

相关文章:

  • 认知语义学对人工智能中自然语言处理的深层语义分析的影响与启示
  • 第四章:AI集成与机器学习
  • Redis面试相关
  • Python获取Windows已安装的所有应用程序列表
  • 计算机视觉(opencv)实战十六——图像像素直方图 与 掩膜
  • SSH登录管理
  • 利用OpenCV进行指纹识别的案例
  • 知识点 | “比选”和“询价”
  • HarmonyOS多媒体开发:音视频播放与录制全解析
  • Linux文件IO——系统IO
  • Class51 深度循环神经网络
  • URLSearchParams
  • 使用 C# 设置 Excel 单元格格式
  • (二) Claude Code接入免费的Gemini-2.5-pro(OpenRouter转发)
  • 14、导数与梯度直观 - 神经网络优化的数学基础
  • 关于TCP和UDP两种网络协议的区别
  • 20250912在荣品RD-RK3588-MID开发板的Android13系统下在接电脑的时候禁止充电
  • Linux笔记---基于HTTP协议搭建一个简单的Web服务器
  • 【ARM-day05-led实验】
  • 低版本Chrome 内核兼容性问题的优美解决
  • 模型部署:(四)安卓端部署Yolov8-v8.2.99实例分割项目全流程记录
  • 使用自定义LLM和Embedding模型部署Vanna:基于RAG的Text-to-SQL生成
  • DataCollatorForCompletionOnlyLM解析(93)
  • 淘宝RecGPT:通过LLM增强推荐
  • Vue3 中使用 DOMPurify 对渲染动态 HTML 进行安全净化处理
  • 比较 iPhone:全面比较 iPhone 17 系列
  • 【Doris】集群介绍
  • 从“能写”到“能干活”:大模型工具调用(Function-Calling)的工程化落地指南
  • golang程序内存泄漏分析方法论
  • Go 语言 MQTT 消息队列学习指导文档