DeepSeek    LeetCode 3966. 统计范围内的好整数 TypeScript实现 这道题要求统计区间 [l, r] 内所有相邻数位绝对差不超过 k 的整数个数。由于 r 最大可达 10^15暴力枚举不可行需要用数位 DP (Digit DP) 来解决。核心思路数位 DP 的核心是“按位构造”数字。我们定义一个递归函数 dfs(i, prev, tightLow, tightHigh)· i当前处理到第几位。· prev上一位的数字用 -1 表示还没有有效前一位以处理前导零。· tightLow / tightHigh表示前缀是否分别紧贴着下界 l 或上界 r。状态转移1. 递归出口处理完所有位数返回 1 表示找到一个好数。2. 确定当前位的可选范围· 下界tightLow ? low[i] : 0· 上界tightHigh ? high[i] : 93. 枚举并递归· 若当前仍处于前导零状态 (prev -1) 且选择 0则继续视为无前导零。· 否则检查当前位与 prev 的绝对差是否 k。TypeScript 实现typescriptfunction goodIntegers(l: number, r: number, k: number): number {// 将上下界补零对齐到相同长度方便数位DP处理const maxLen: number String(r).length;const lowStr: string String(l).padStart(maxLen, 0);const highStr: string String(r).padStart(maxLen, 0);const low: number[] lowStr.split().map(Number);const high: number[] highStr.split().map(Number);// 记忆化数组dp[i][prev1][tightLow][tightHigh]// prev 范围 -1 ~ 9加1偏移映射到 0 ~ 10const memo: Mapstring, number new Map();function dfs(i: number, prev: number, tightLow: boolean, tightHigh: boolean): number {if (i maxLen) {return 1; // 成功构造出一个好数}const key: string ${i},${prev 1},${tightLow},${tightHigh};if (memo.has(key)) {return memo.get(key)!;}// 确定当前位的可选范围const lo: number tightLow ? low[i] : 0;const hi: number tightHigh ? high[i] : 9;let ans: number 0;for (let digit lo; digit hi; digit) {const nextTightLow: boolean tightLow (digit lo);const nextTightHigh: boolean tightHigh (digit hi);// 处理前导零如果之前没有有效数字且当前填0则prev仍为-1if (prev -1 digit 0) {ans dfs(i 1, -1, nextTightLow, nextTightHigh);} else if (prev -1 || Math.abs(digit - prev) k) {// 第一个有效数字或差值满足条件ans dfs(i 1, digit, nextTightLow, nextTightHigh);}}memo.set(key, ans);return ans;}return dfs(0, -1, true, true);}复杂度分析· 时间复杂度O(maxLen * 10 * 2 * 2 * 10)即 O(log r * 10^2)对于 10^15 的量级绰绰有余。· 空间复杂度O(log r * 10 * 2 * 2)。

相关新闻

最新新闻

ROG夜魔X机械键盘深度评测:客制化手感与旗舰无线体验如何兼得?

ROG夜魔X机械键盘深度评测:客制化手感与旗舰无线体验如何兼得?

作为一名长期关注外设领域的玩家,最近我发现一个有趣的现象:很多朋友在挑选高端机械键盘时,常常陷入一个误区——要么追求极致的客制化,忍受漫长的等待和复杂的组装;要么选择品牌量产键盘,却又觉得个性化和…

2026/8/20 10:46:12
Studio Library 完整上手指南:一个动画师如何用 Maya 动画库工具省下半天工

Studio Library 完整上手指南:一个动画师如何用 Maya 动画库工具省下半天工

Studio Library 完整上手指南:一个动画师如何用 Maya 动画库工具省下半天工 【免费下载链接】studiolibrary Studio Library 项目地址: https://gitcode.com/gh_mirrors/st/studiolibrary 如果你每天要在 Maya 里反复摆姿势、找关键帧、重做别人的动画&#…

2026/8/20 10:46:12
透射式烟度计响应时间检定仪如何计量机动车尾气

透射式烟度计响应时间检定仪如何计量机动车尾气

机动车尾气排放检测是守护大气环境的重要技术手段,透射式烟度计作为压燃式柴油车排气黑烟检测的核心设备,广泛应用于机动车检测站、生态环境监测机构、第三方检测实验室等场所。烟度计测量电路的响应时间直接决定黑烟瞬态信号捕捉能力,若响应…

2026/8/20 10:46:12
鸣潮工具箱WaveTools全功能实测:120帧解锁、画质细调与抽卡分析一次到位

鸣潮工具箱WaveTools全功能实测:120帧解锁、画质细调与抽卡分析一次到位

鸣潮工具箱WaveTools全功能实测:120帧解锁、画质细调与抽卡分析一次到位 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 屏幕上明明写着 144Hz,游戏却纹丝不动地锁在 60 帧&#xf…

2026/8/20 10:46:12
旧iPhone/iPad卡成幻灯片?保姆级Legacy iOS Kit降级教程,让设备重获新生

旧iPhone/iPad卡成幻灯片?保姆级Legacy iOS Kit降级教程,让设备重获新生

旧iPhone/iPad卡成幻灯片?保姆级Legacy iOS Kit降级教程,让设备重获新生 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mir…

2026/8/20 10:46:12
微信网页版打不开、白屏、登不上?wechat-need-web 三步让你重新聊上天

微信网页版打不开、白屏、登不上?wechat-need-web 三步让你重新聊上天

微信网页版打不开、白屏、登不上?wechat-need-web 三步让你重新聊上天 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 很多人以为微信网页…

2026/8/20 10:41:12