Kimi    LeetCode 3704. 统计和为 N 的无零数对 Java实现
以下是 LeetCode 3704「统计和为 N 的无零数对」的 Java 实现。思路数位 DP由于 n 最大可达 10^15枚举所有数对会超时需要用 数位 DP 来解决。核心思想是从 最低位到最高位 逐位处理 n 的十进制表示状态定义为- dp[carry][aliveA][aliveB]处理到当前位时低位进位为 carrya 和 b 是否还在更高位有有效数字aliveA/aliveB。转移时枚举当前位 da 和 db- 如果 aliveX 1当前位可以取 1~9无零或在非最低位时取 0表示该数到此结束。- 如果 aliveX 0当前位只能取 0前导零不属于十进制表示。需要满足 (da db carry) % 10 n 的当前位。最后给 n 补一位 0 来吸收最终进位答案为 dp[0][0][0]。时间复杂度 O(L × 9²)空间复杂度 O(1)其中 L 为 n 的位数。javaclass Solution {public long countNoZeroPairs(long n) {char[] cs Long.toString(n).toCharArray();int m cs.length;// digits[i] 表示 n 的第 i 位从低位到高位0-basedint[] digits new int[m 1];for (int i 0; i m; i) {digits[i] cs[m - 1 - i] - 0;}digits[m] 0; // 额外补一位最高位 0吸收最终进位// dp[carry][aliveA][aliveB]long[][][] dp new long[2][2][2];dp[0][1][1] 1; // 初始状态无进位a 和 b 都还在存活for (int pos 0; pos m 1; pos) {long[][][] ndp new long[2][2][2];int target digits[pos];for (int carry 0; carry 1; carry) {for (int aliveA 0; aliveA 1; aliveA) {for (int aliveB 0; aliveB 1; aliveB) {long ways dp[carry][aliveA][aliveB];if (ways 0) {continue;}// 构造 a 当前位可选的数字及对应的 aliveA 下一状态int[] aDigits;int[] aNext;if (aliveA 1) {if (pos 0) {// 最低位必须是非零数字1~9因为 a 是正整数aDigits new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9};aNext new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1};} else {// 非最低位可以选 1~9继续存活或选 0在此结束aDigits new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};aNext new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 0};}} else {// a 已经结束当前位只能是 0aDigits new int[] {0};aNext new int[] {0};}// 构造 b 当前位可选的数字及对应的 aliveB 下一状态int[] bDigits;int[] bNext;if (aliveB 1) {if (pos 0) {bDigits new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9};bNext new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1};} else {bDigits new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};bNext new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 0};}} else {bDigits new int[] {0};bNext new int[] {0};}for (int ai 0; ai aDigits.length; ai) {int da aDigits[ai];int na aNext[ai];for (int bi 0; bi bDigits.length; bi) {int db bDigits[bi];int nb bNext[bi];int s da db carry;if (s % 10 ! target) {continue;}int ncarry s / 10;ndp[ncarry][na][nb] ways;}}}}}dp ndp;}// 最终要求无剩余进位a 和 b 都已经结束return dp[0][0][0];}}关键点说明1. 从低位到高位处理因为加法进位是从低位向高位传递的。2. alive 状态表示该数在更高位是否还有有效数字。alive 0 意味着该数已经结束更高位只能填 0前导零不计入十进制表示。3. 最低位特殊处理pos 0 时a 和 b 的最低位不能取 0因为它们是正整数最低位必须是 1~9。4. 额外补位digits[m] 0 用于处理最高位可能产生的进位确保所有状态正确收敛。

相关新闻

ChatGPT定时任务功能详解:从配置到实战的自动化指南

ChatGPT定时任务功能详解:从配置到实战的自动化指南

这次我们来看 ChatGPT 工作区新增的定时任务功能。这个功能让 ChatGPT 不再只是即时对话工具,而是能够按计划自动执行任务的智能助手。对于需要定期生成报告、自动检查数据、定时发送消息的用户来说,这直接解决了"重复劳动"的痛点。从核心能力…

2026/7/25 2:38:30 阅读更多 →
告别导出繁琐!AI 导出鸭一站式讲解怎样把 Claude 表格导出技巧

告别导出繁琐!AI 导出鸭一站式讲解怎样把 Claude 表格导出技巧

AI导出鸭实操教程:怎样把Claude表格导出高效落地全流程告别导出繁琐!AI导出鸭一站式讲解怎样把Claude表格导出技巧多终端工具测评|AI导出鸭手把手教你怎样把Claude表格导出无格式错乱 引言 日常使用Claude整理项目数据、统计台账、调研表格时…

2026/7/25 2:38:30 阅读更多 →
大语言模型多轮对话优化的关键技术方案

大语言模型多轮对话优化的关键技术方案

1. 项目背景与核心挑战在大语言模型(LLM)的实际应用中,多轮对话质量直接决定了用户体验。我在多个对话系统项目中反复验证过一个现象:单轮回答出色的模型,在连续对话中常出现上下文断裂、指代混乱和记忆丢失三大典型问…

2026/7/25 2:38:29 阅读更多 →

最新新闻

二手数控机床验机避坑:主轴精度与激光干涉仪检测全流程

二手数控机床验机避坑:主轴精度与激光干涉仪检测全流程

一、为什么验机是二手机床交易的关键环节二手数控机床的精度直接决定加工质量和使用寿命。主轴径向跳动、定位精度、重复定位精度、圆度等指标,是判断机床真实状态的核心依据。本文以实操视角,介绍主轴精度检测、激光干涉仪测定位精度、球杆仪测圆度等关…

2026/7/25 2:49:32 阅读更多 →
WPS办公软件C盘空间不足的深度清理与优化方案

WPS办公软件C盘空间不足的深度清理与优化方案

1. 问题现象与初步排查最近在帮同事处理一台办公电脑时,遇到了一个典型问题:使用WPS办公套件时,系统频繁提示C盘空间不足,但点击软件内置的"释放C盘空间"功能后毫无反应。这种情况在长期使用WPS的办公环境中并不少见&am…

2026/7/25 2:49:32 阅读更多 →
财务报表生成_financial-statements

财务报表生成_financial-statements

以下为本文档的中文说明 financial-statements 是一个专门用于生成财务报表的技能,涵盖利润表(损益表)、资产负债表和现金流量表的生成,支持跨期比较和差异分析。该技能适用于多个财务工作场景:月度或季度的损益表准备…

2026/7/25 2:49:32 阅读更多 →
笔记本质量审计_cookbook-audit

笔记本质量审计_cookbook-audit

以下为本文档的中文说明 Cookbook 审计技能是一个专门用于审查 Anthropic Cookbook 笔记本的质量评估工具,基于预定义的评分标准进行系统性评审。它的核心功能包括对照风格指南评估笔记本质量、提供详细评分和改进建议、确保内容符合教学标准。使用场景是在需要对 C…

2026/7/25 2:49:32 阅读更多 →
财务比率分析_analyzing-financial-statements

财务比率分析_analyzing-financial-statements

以下为本文档的中文说明analyzing-financial-statements 是由 Anthropic 开发的财务比率计算与分析技能,专注于从财务报表数据中计算关键财务指标并用于投资分析。该技能提供了一个全面的财务比率分析框架,用于评估公司业绩、盈利能力、流动性和估值水平…

2026/7/25 2:49:32 阅读更多 →
Ubuntu系统下Android Studio导致关机失败的解决方案

Ubuntu系统下Android Studio导致关机失败的解决方案

1. 问题现象与初步排查最近在Dell笔记本上使用Ubuntu系统开发Android应用时,遇到一个奇怪的系统行为:当Android Studio处于运行状态时,尝试关机操作会完全失效。点击关机按钮后,系统没有任何反应,既没有弹出关机确认对…

2026/7/25 2:48:32 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻