DeepSeek    LeetCode 3753. 范围内总波动值 II Python3实现
这道题的核心是数位DP (Digit DP)直接枚举区间内的每个数字会超时。代码实现可以直接参考 LeetCode 官方题解区或 GitHub 上的高票答案。 问题回顾· 波动值 (Waviness)一个数字中峰严格大于两边和谷严格小于两边的总数。· 规则首尾数字不算少于3位的数字波动值为0。· 目标返回区间 [num1, num2] 内所有数字波动值之和。 核心思路数位DP (Digit DP)利用前缀和思想 f(num) 计算 [0, num] 的总波动值答案即为 f(num2) - f(num1 - 1)。数位DP通过状态压缩避免枚举每个数字核心DP状态通常包含· pos当前处理到第几位。· lastDigit / prevDigit前一位或前两位的数字用于判断峰谷。· lastDir前两位数字的大小关系上升/下降/相等。· tight当前前缀是否和上限 num 的前缀完全一致决定当前位上限。· started是否已经开始填数字用于处理前导零。 Python3 代码实现pythonclass Solution:def totalWaviness(self, num1: int, num2: int) - int:# 辅助函数计算 [0, num] 内所有数字的波动值之和def count_upto(num: int) - int:if num 100: # 少于3位波动值均为0return 0digits list(map(int, str(num)))n len(digits)from functools import lru_cache# 比较两个数字的大小关系用于判断峰谷# 返回: -1 下降, 0 相等, 1 上升def cmp(a: int, b: int) - int:if a b:return 1if a b:return 0return -1lru_cache(None)def dfs(pos: int, prev2: int, prev1: int, started: bool, tight: bool) - (int, int):# 返回: (从当前状态能构造出的数字个数, 这些数字的波动值总和)if pos n:# 如果从未开始即数字0个数为1波动值为0return (1, 0) if started else (0, 0)limit digits[pos] if tight else 9total_count 0total_waviness 0for d in range(0, limit 1):n_started started or d ! 0n_tight tight and (d limit)if not n_started:# 仍然是前导零prev1和prev2无意义用 -1 占位cnt, wav dfs(pos 1, -1, -1, False, n_tight)else:if not started:# 刚结束前导零当前是第一个有效数字无法判断峰谷cnt, wav dfs(pos 1, -1, d, True, n_tight)else:# 已有至少一个有效数字可以尝试判断峰谷add 0# 当 prev2 也存在时即至少有3个有效数字判断 prev1 是否为峰或谷if prev2 ! -1:if (prev2 prev1 d) or (prev2 prev1 d):add 1cnt, wav dfs(pos 1, prev1, d, True, n_tight)wav add * cnt # 当前位判断产生的波动值贡献给所有后续构造出的数字total_count cnttotal_waviness wavreturn (total_count, total_waviness)# 从最高位开始DFS初始时未开始startedFalse处于受限状态tightTruereturn dfs(0, -1, -1, False, True)[1]# 利用前缀和思想计算区间 [num1, num2] 的结果return count_upto(num2) - count_upto(num1 - 1)⏱️ 复杂度分析· 时间复杂度约为 O(log N * 10 * 状态数)其中 N 是 num2。状态数pos, prev1, prev2, started, tight是常数级别因此效率很高。· 空间复杂度O(状态数)用于存储记忆化搜索的缓存。✅ 测试示例pythonsol Solution()print(sol.totalWaviness(120, 130)) # 输出: 3print(sol.totalWaviness(198, 202)) # 输出: 3print(sol.totalWaviness(4848, 4848)) # 输出: 2这段代码通过数位DP高效地统计了所有数字的波动值总和可以处理 num2 高达 10^15 的情况。

相关新闻

DeepSeek    LeetCode 3753. 范围内总波动值 II Java实现

DeepSeek LeetCode 3753. 范围内总波动值 II Java实现

题目理解波动值定义: 峰:数位 严格大于 其两个相邻数位谷:数位 严格小于 其两个相邻数位第一个和最后一个数位不能是峰或谷少于3位的数字,波动值为0示例:4848 中,第二个数位 8 是峰,第三个…

2026/11/10 17:54:58 阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-`replaceUrl` 与 `pushUrl` 的核心区别、无回退栈的设计原则、以及在实际项目中的正确使用方

HarmonyOS应用开发实战:猫猫大作战-`replaceUrl` 与 `pushUrl` 的核心区别、无回退栈的设计原则、以及在实际项目中的正确使用方

前言 在某些场景下,我们不希望用户通过返回键回到之前的页面——例如登录页跳转到主页、启动引导页跳转到首页、游戏结束后重新开始。HarmonyOS 提供了 router.replaceUrl 来替换当前页面,被替换的页面会从页面栈中移除,用户无法通过返回键回…

2026/10/25 5:33:38 阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-在 HarmonyOS 应用中,WindowStage(窗口舞台)是连接 UIAbility 与页面的中间枢纽

HarmonyOS应用开发实战:猫猫大作战-在 HarmonyOS 应用中,WindowStage(窗口舞台)是连接 UIAbility 与页面的中间枢纽

前言 在 HarmonyOS 应用中,WindowStage(窗口舞台)是连接 UIAbility 与页面的中间枢纽——它负责管理应用窗口的创建、显示、隐藏、销毁全周期,并承载 loadContent 加载首屏页面。理解 onWindowStageCreate 回调的完整能力&#x…

2026/11/9 1:32:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻