尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Kimi    LeetCode 3797. 统计在矩形格子里移动的路径数目 TypeScript实现
LeetCode 3797. 统计在矩形格子里移动的路径数目 — TypeScript 实现思路状态定义从下往上递推- f[i][j]到达 (i, j)且最后一步是从下一行纵向移动上来的路径数- g[i][j]到达 (i, j)且最后一步是同一行横向移动来的路径数转移方程1. 纵向移动从 (i1, j) 到 (i, j)要求 √(1 (j-j)²) ≤ d即 |j-j| ≤ √(d²-1)。记 k ⌊√(d²-1)⌋。f[i][j] Σ(f[i1][j] g[i1][j])j ∈ [j-k, jk]2. 横向移动从 (i, j) 到 (i, j)要求 |j-j| ≤ d 且 j ≠ j。关键限制不能连续两次横向移动所以横向移动的前一步必须是从下一行上来的。g[i][j] Σ(f[i][j])j ∈ [j-d, jd] 且 j ≠ j3. 初始化最后一行每个空地作为起点f[n-1][j] 1两个转移都是区间求和用前缀和优化到 O(1)总复杂度 O(n·m)。---TypeScript 代码typescriptfunction numberOfRoutes(grid: string[], d: number): number {const MOD 1_000_000_007;const n grid.length;const m grid[0].length;// 纵向移动时横向最大偏移floor(sqrt(d^2 - 1))const k Math.floor(Math.sqrt(d * d - 1));// prefix[i][j][0]: 第 i 行前 j 个位置0~j-1的 f 之和// prefix[i][j][1]: 第 i 行前 j 个位置0~j-1的 g 之和const prefix: number[][][] Array.from({ length: n }, () Array.from({ length: m 1 }, () [0, 0]));const add (a: number, b: number): number (a b) % MOD;const sub (a: number, b: number): number (a - b MOD) % MOD;for (let i n - 1; i 0; i--) {// 1. 计算 f[i][j]从下一行上来for (let j 0; j m; j) {if (grid[i][j] .) {if (i n - 1) {// 最后一行作为起点prefix[i][j 1][0] add(prefix[i][j][0], 1);} else {const l Math.max(j - k, 0);const r Math.min(j k, m - 1);const sumF sub(prefix[i 1][r 1][0], prefix[i 1][l][0]);const sumG sub(prefix[i 1][r 1][1], prefix[i 1][l][1]);const curr add(sumF, sumG);prefix[i][j 1][0] add(prefix[i][j][0], curr);}} else {// 障碍物前缀和不变prefix[i][j 1][0] prefix[i][j][0];}}// 2. 计算 g[i][j]同一行横向移动// 只能从上一步是从下一行上来的状态转移不能连续横向for (let j 0; j m; j) {if (grid[i][j] .) {const l Math.max(j - d, 0);const r Math.min(j d, m - 1);// 排除 j 本身拆成 [l, j-1] 和 [j1, r] 两段let left 0, right 0;if (l j - 1) {left sub(prefix[i][j][0], prefix[i][l][0]);}if (j 1 r) {right sub(prefix[i][r 1][0], prefix[i][j 1][0]);}const curr add(left, right);prefix[i][j 1][1] add(prefix[i][j][1], curr);} else {prefix[i][j 1][1] prefix[i][j][1];}}}// 第 0 行所有可用格子的 f g 之和return add(prefix[0][m][0], prefix[0][m][1]);}---复杂度项目 复杂度时间 O(n × m)空间 O(n × m)可滚动优化至 O(m)
RELATED

相关推荐

Linux系统下阿里云盘命令行与FUSE挂载实战指南

Linux系统下阿里云盘命令行与FUSE挂载实战指南

1. 项目概述:为什么要在Linux上折腾阿里云盘? 如果你是一个长期在Linux桌面环境下工作的开发者、运维或者技术爱好者,看到这个标题可能会心一笑。是的,阿里云盘官方并没有提供Linux桌面版的客户端,这几乎是所有国内主…

📅 2026/8/25 8:25:45
Unity游戏实时翻译实战:基于BepInEx与XUnity.AutoTranslator的完整指南

Unity游戏实时翻译实战:基于BepInEx与XUnity.AutoTranslator的完整指南

1. 项目概述:为什么我们需要游戏实时翻译? 如果你是一个热爱独立游戏或日系RPG的玩家,肯定遇到过这样的烦恼:一款玩法独特、美术惊艳的游戏,因为语言不通而只能望而却步。或者,你是一个Unity开发者&#xf…

📅 2026/9/8 20:02:51
OpenClaw-RL:大模型规划与强化学习协同的智能体自主进化框架

OpenClaw-RL:大模型规划与强化学习协同的智能体自主进化框架

1. 从“边聊边学”到“自主进化”:OpenClaw-RL的范式革新最近在智能体开发圈子里,一个叫OpenClaw-RL的项目讨论度挺高。乍一看标题“边聊边学的智能体变强秘笈”,很多人可能会觉得这又是一个基于大语言模型(LLM)的对话…

📅 2026/9/5 0:45:44
MORE NEWS

更多资讯

📰

Atlas 300V 24G是运算加速卡吗?从NPU到YOLO部署全解读

Atlas 300V 24G是运算加速卡吗?——这个热搜背后的问题,过去半年里我至少被问了五遍。问的人有搞安防的、有做算法平台的、还有本来想买RTX 4090但被采购拦下来的。他们看到300V的第一反应基本一致:这不就是一张长得像显卡的PCIe卡吗&#xf…

📰

TCP/IP协议首部解析:网络通信的底层指令集与故障排查指南

1. 为什么首部结构是网络协议的“身份证”和“操作说明书”你有没有遇到过这样的情况:用telnet ip 端口测试服务连通性时,返回Connection refused,但ping却通;或者用iperf3 -u打 UDP 流,带宽上不去,抓包一看…

📰

从零自研CRM系统:Spring Boot+Vue实战技术解析

1. 项目缘起:为什么我还要再造一个CRM轮子DeskcommCRM,这个名字里的 Desk 和 comm 分别取的是 Desktop(桌面办公)和 Communication(内部沟通)。说白了,它就是一套扎根在“办公桌”场景下的客户关…

📰

Windows 10远程桌面全链路排错指南:从NLA校验到会话资源管理

1. 这不是“点一下就通”的功能,而是Windows远程桌面的完整通关手册你搜“win10开启远程桌面连接”时,看到的教程大多只有三步:设置里开开关、防火墙放行、用mstsc.exe连——然后就没了。结果你照着做,输入IP,弹出“无…

📰

2026年深圳南山知名的冯校长老火锅,宝安性价比高的火锅店本地靠谱服务机构排行榜

深圳市丽麟餐饮管理投资有限公司旗下的冯校长老火锅(宝安怀德万象汇店),是源自成都的全国连锁川味火锅品牌线下门店,立足深圳宝安怀德万象汇商圈,主打地道成都川味老火锅,传承成都市井火锅的烟火内核,致力于为大湾区食…

📰

Phoenix 中 OTel contextvars 与 async 边界的实战避坑指南:为何不在异步生成器清理路径里使用 contextvars

可观测性AI 评测LLMOpsAI 应用人工智能 【免费下载链接】phoenix AI Observability & Evaluation 项目地址: https://gitcode.com/gh_mirrors/phoenix13/phoenix 点击查看 免费下载 本文是 Phoenix(AI Observability & Evaluation 平台&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬