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

力扣9.28

377. 组合总和 Ⅳ

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

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

数据范围

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 1000
  • nums 中的所有元素 互不相同
  • 1 <= target <= 1000

分析

dp[i]表示总和为i的方案数

  • d p [ i ] + = ∑ j = 1 n d p [ i − n u m s [ j ] ] dp[i]+=\sum_{j=1}^{n}dp[i-nums[j]] dp[i]+=j=1ndp[inums[j]]

代码

class Solution {
public:const static int N = 1005, M = 205;unsigned long long dp[N];unsigned long long combinationSum4(vector<int>& nums, int target) {int n = nums.size();dp[0] = 1;for(int i = 0; i <= target; i ++ ) {for(int j = 1; j <= n; j ++ ) {if(i >= nums[j - 1])dp[i] += dp[i - nums[j - 1]];}}return dp[target];}
};

2466. 统计构造好字符串的方案数

给你整数 zeroonelowhigh ,我们从空字符串开始构造一个字符串,每一步执行下面操作中的一种:

'0' 在字符串末尾添加 zero 次。
'1' 在字符串末尾添加 one 次。
以上操作可以执行任意次。

如果通过以上过程得到一个 长度 在 lowhigh 之间(包含上下边界)的字符串,那么这个字符串我们称为 好 字符串。

请你返回满足以上要求的 不同 好字符串数目。由于答案可能很大,请将结果对 109 + 7 取余 后返回。

数据范围

  • 1 <= low <= high <= 105
  • 1 <= zero, one <= low

分析

和上题思路一样,都算是爬楼梯类型

代码

class Solution {
public:const static int N = 1e5 + 5, mod = (int)1e9 + 7;unsigned long long dp[N];unsigned long long countGoodStrings(int low, int high, int zero, int one) {dp[0] = 1;unsigned long long res = 0;for(int i = 1; i <= high; i ++ ) {if(i >= zero) dp[i] += dp[i - zero];if(i >= one) dp[i] += dp[i - one];if(i >= low) res += dp[i];dp[i] %= mod;res %= mod;}return res;}
};

2266. 统计打字方案数

题目链接

分析

爬楼梯变式,令dp[i]为长度为i的字符串可能的文字信息数

  • d p [ i ] + = ∑ j = 1 l a s t n u m s d p [ i − j ] ,其中 l a s t n u m s 为与 n u m s [ i ] 相接的相同数字个数,例如 2333 第 4 个位置的 3 的 l a s t n u m s 为 3 dp[i]+=\sum_{j=1}^{lastnums}dp[i-j],其中lastnums为与nums[i]相接的相同数字个数,例如2333第4个位置的3的lastnums为3 dp[i]+=j=1lastnumsdp[ij],其中lastnums为与nums[i]相接的相同数字个数,例如23334个位置的3lastnums3

代码

class Solution {
public:const static int N = 1e5 + 5, mod = (int)1e9 + 7;unsigned long long dp[N];int cnt[30];unsigned long long countTexts(string pressedKeys) {int n = pressedKeys.size();for(int i = 2; i <= 9; i ++ ) cnt[i] = 3;cnt[7] = cnt[9] = 4;int lastNums = 0;dp[0] = 1;int tlast = 0;for(int i = 1; i <= n; i ++ ) {if(i >= 2) {if(pressedKeys[i - 1] == pressedKeys[i - 2]) lastNums ++ ;else lastNums = 1;} else lastNums = 1;tlast = min(lastNums, cnt[pressedKeys[i - 1] - '0']);for(int j = 1; j <= tlast; j ++ ) {dp[i] += dp[i - j];dp[i] %= mod;}}return dp[n];}
};

相关文章:

  • Python按照指定“字体大小以及字体格式”,批量更新Word文档内容(10)
  • 基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
  • Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
  • HTTP请求中GET与POST方法的核心区别与用途解析
  • VMware下的ubuntu显示文字太小的自适应显示调整
  • 力扣题解2286
  • 【高分系列卫星简介——高分五号卫星(GF-5)】
  • Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)
  • 【NodeJS】npm、yarn、pnpm当前项目设置国内镜像源
  • 【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)
  • linux脚本工具
  • 【Godot4.3】简单物理模拟之圆粒子碰撞检测
  • 【Java】虚拟机(JVM)内存模型全解析
  • RM服务器研究(一)
  • SpringBoot3.X配置OAuth
  • ----------
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Angular2开发踩坑系列-生产环境编译
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Javascript弹出层-初探
  • mockjs让前端开发独立于后端
  • node和express搭建代理服务器(源码)
  • Octave 入门
  • pdf文件如何在线转换为jpg图片
  • Puppeteer:浏览器控制器
  • Redis在Web项目中的应用与实践
  • 对象管理器(defineProperty)学习笔记
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 聊聊sentinel的DegradeSlot
  • 前端面试题总结
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微信小程序填坑清单
  • 小程序测试方案初探
  • 小而合理的前端理论:rscss和rsjs
  • 译米田引理
  • Semaphore
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #NOIP 2014# day.2 T2 寻找道路
  • (Java)【深基9.例1】选举学生会
  • (附源码)计算机毕业设计ssm电影分享网站
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (南京观海微电子)——示波器使用介绍
  • (转)项目管理杂谈-我所期望的新人
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • *p++,*(p++),*++p,(*p)++区别?
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET delegate 委托 、 Event 事件
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET 给NuGet包添加Readme