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

Qwen模型 LeetCode 2585. 获得分数的方法数 TypeScript实现

哇!TypeScript版本来啦~这道题用TS写起来特别优雅,类型安全又清晰!让我给你展示一个高效又易读的实现!

```typescript
function waysToReachTarget(target: number, types: number[][]): number {
const MOD = 1000000007;

// dp[j] 表示恰好花费j时间的方法数
const dp: number[] = new Array(target + 1).fill(0);
dp[0] = 1; // 基础情况:花费0时间有1种方法(什么都不选)

// 遍历每种题目类型
for (const [count, mark] of types) {
// 创建新的dp数组,避免在更新过程中使用已修改的值
const newDp: number[] = [...dp];

// 对于每个可能的时间花费
for (let time = mark; time <= target; time++) {
// 尝试选择1个、2个...count个当前类型的题目
for (let k = 1; k <= count; k++) {
const neededTime = k * mark;
if (neededTime > time) break;

newDp[time] = (newDp[time] + dp[time - neededTime]) % MOD;
}
}

// 更新dp数组
dp.splice(0, dp.length, ...newDp);
}

return dp[target];
}
```

不过等等!这个版本虽然清晰,但还可以进一步**优化性能**。让我给你一个更高效的版本,避免数组复制的开销:

```typescript
function waysToReachTarget(target: number, types: number[][]): number {
const MOD = 1000000007;

// 使用滚动数组,从后往前更新
const dp: number[] = new Array(target + 1).fill(0);
dp[0] = 1;

for (const [count, mark] of types) {
// 从target到mark倒序遍历,避免重复计算
for (let time = target; time >= mark; time--) {
// 临时变量记录新增的方法数
let add = 0;

// 计算选择1到count个当前类型题目的贡献
for (let k = 1; k <= count && k * mark <= time; k++) {
add = (add + dp[time - k * mark]) % MOD;
}

dp[time] = (dp[time] + add) % MOD;
}
}

return dp[target];
}
```

**✨ TypeScript的优势体现**:

1. **类型安全**:`target: number`, `types: number[][]` 让代码意图一目了然
2. **解构赋值**:`for (const [count, mark] of types)` 超简洁!
3. **数组操作**:`new Array(target + 1).fill(0)` 初始化超方便

**让我用个生动的例子解释算法**:

想象你在经营一家魔法商店 🧙‍♂️:
- **商品类型1**:最多卖3个魔法卷轴,每个售价2金币
- **商品类型2**:最多卖2个魔法药水,每个售价3金币
- **目标**:刚好收10金币,问有多少种销售组合?

这就是典型的**多重背包问题**!每种商品有库存限制,我们要恰好花完(收完)指定金额。

**核心思路**:
- 🎯 **状态定义**:`dp[time]` = 恰好花费`time`时间的方法数
- 🔄 **状态转移**:对每种题目类型,考虑选择0到count个的所有可能性
- 🛡️ **边界处理**:`dp[0] = 1` 是关键的base case

**时间复杂度**:O(n × target × maxCount)
**空间复杂度**:O(target)

其实这个问题还可以用**生成函数**的角度理解:每种题目类型对应多项式 `(1 + x^mark + x^(2*mark) + ... + x^(count*mark))`,答案就是所有多项式乘积中 `x^target` 的系数!

你觉得这个TS实现怎么样?要不要我再给你讲讲其他动态规划的经典套路?比如如何识别背包问题的变种?😄

http://www.jsqmd.com/news/874126/

相关文章:

  • Windows 11系统级优化:ExplorerPatcher核心技术深度解析与专业修复方案
  • 2025-2026年全球ai写小说软件推荐:五大口碑产品评测新手防无从下手适用场景价格 - 品牌推荐
  • 2026年5月更新:浙江白油供应商深度,顶鑫润滑油为何脱颖而出? - 2026年企业推荐榜
  • 5个核心功能,让RPFM成为全面战争模组制作的终极利器
  • 【前端进阶】React状态管理完全指南:从useState到Redux
  • 2026出口宠物毛衣权威厂商解析:男女式Polo针织衫/粗心针针织产品/资质齐全针织全品类工厂/针织加工全品类源头工厂/选择指南 - 优质品牌商家
  • 2026年5月1500万-2000万上海新房项目推荐买哪里:五大楼盘专业评测对比夜归人防选房焦虑 - 品牌推荐
  • 今日算法(回溯算法)
  • Harness的配置漂移检测与自动修复
  • WSA-Pacman:让Windows安卓应用管理变得前所未有的简单
  • Eclipse 快捷键
  • 2026年Q2自动升旗设备选购全维度技术指南:游泳计时设备、田径比赛系统、电子记分牌、篮球倒计时、篮球计时计分选择指南 - 优质品牌商家
  • 【教育部“人工智能+教育”试点标杆】:从零部署到常态化应用——某省327所乡村校6个月落地实录
  • 深度学习CNN(四)—— 高级卷积变体(四十一)
  • 2026年5月充电桩加盟品牌推荐:十大排名榜单厂家评测专业价格 - 品牌推荐
  • 哪家北京装修设计公司专业?2026年5月推荐TOP5对比施工质量评测案例适用场景 - 品牌推荐
  • WebPages WebGrid:下一代网页数据展示与交互平台
  • LangGraph多智能体工作流:从线性执行到网状协作的重构
  • 深度学习CNN(五)—— 经典任务:分类、检测、分割(四十二)
  • 2026年5月十大游戏鼠标品牌推荐:十大产品专业评测夜战防手酸 - 品牌推荐
  • 2026年5月北京家装公司推荐:TOP5排名专业评测施工质量价格注意事项 - 品牌推荐
  • 2025-2026年北京老房翻新装修公司推荐:五大口碑评测厨卫翻新防潮霉市场份额价格 - 品牌推荐
  • 2026年株洲轻松置家总部旗舰店深度解析:本土房产交易场景信息杂乱与流程繁琐痛点 - 品牌推荐
  • 前端开发语言使用流行度排行与分析
  • PHP 面向对象编程(OOP)深入解析
  • 2026年株洲轻松置家总部旗舰店深度解析:本土房产交易场景信息不对称与流程风险痛点 - 品牌推荐
  • OpCore-Simplify:智能硬件适配与OpenCore EFI配置的终极解决方案
  • 对比体验使用Taotoken聚合接口与直连原厂API的延迟与稳定性差异
  • 如何选择北京家装公司?2026年5月推荐TOP5对比老房翻新防超支评测注意事项 - 品牌推荐
  • 提升检索准确率:RAG Harness 的重排序策略