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

Kimi k2.6 LeetCode 2999. 统计强大整数的数目 C++实现

以下是 LeetCode 2999. 统计强大整数的数目 的 C++ 实现,采用数位 DP(Digit DP)思路。

核心思路

强大整数的条件:
1. 后缀必须是 `s`
2. 每个数位都不超过 `limit`

利用容斥原理:`[start, finish]` 内的强大整数个数 = `[0, finish]` 内的个数 − `[0, start-1]` 内的个数。

C++ 代码

```cpp
class Solution {
public:
long long numberOfPowerfulInt(long long start, long long finish, int limit, string s) {
this->s = s;
this->limit = limit;

// 计算 [0, start-1] 内的强大整数个数
t = to_string(start - 1);
memset(f, -1, sizeof(f));
long long a = dfs(0, true);

// 计算 [0, finish] 内的强大整数个数
t = to_string(finish);
memset(f, -1, sizeof(f));
long long b = dfs(0, true);

return b - a;
}

private:
string s; // 后缀
string t; // 当前上界数字的字符串
long long f[20]; // 记忆化数组,-1 表示未计算
int limit; // 数位上限

/**
* 数位 DP:计算小于等于 t 的强大整数个数
* @param pos 当前处理到的位置
* @param lim 是否受上界 t 的约束(tight)
*/
long long dfs(int pos, bool lim) {
// 如果上界 t 的长度比后缀 s 还短,不可能有以 s 为后缀的数
if (t.length() < s.length()) {
return 0;
}

// 不受 tight 约束时,可以用记忆化
if (!lim && f[pos] != -1) {
return f[pos];
}

// 到达后缀区域:剩余长度恰好等于 s 的长度
if (t.length() - pos == s.length()) {
// 如果受 tight 约束,需要判断后缀 s 是否 <= t 的剩余部分
return lim ? (s.compare(t.substr(pos)) <= 0 ? 1 : 0) : 1;
}

// 当前位可选的上限
int up = lim ? t[pos] - '0' : 9;
up = min(up, limit);

long long ans = 0;
for (int i = 0; i <= up; i++) {
// 继续递归下一位,更新 tight 状态
ans += dfs(pos + 1, lim && i == (t[pos] - '0'));
}

// 记忆化:只有不受 tight 约束时才存储
if (!lim) {
f[pos] = ans;
}
return ans;
}
};
```

关键点说明

要点 说明
容斥原理 `count(finish) - count(start-1)` 得到区间答案
后缀处理 当剩余长度等于 `s.length()` 时,进入强制匹配后缀的逻辑
tight 约束 `lim=true` 表示当前构造的前缀与上界 `t` 完全相同,下一位不能超过 `t` 的对应位
记忆化 只有 `lim=false`(不受 tight 约束)时才缓存结果,`lim=true` 时结果与具体上界相关
数位上限 每位可选 `0` 到 `min(limit, 上界对应位)`,同时满足 `limit` 和 `tight` 两个约束

复杂度分析

- 时间复杂度:O(\log M \times D),其中 M 是数值上界(最大 10^{15}),D = 10 为可选数字个数。实际由于记忆化,状态数约为 O(\log M)。
- 空间复杂度:O(\log M),用于记忆化数组和递归栈。

http://www.gsyq.cn/news/1463512.html

相关文章:

  • 2026 年字节 AI 多线作战:世界模型、Coding、视频模型、豆包商业化谁能突围?
  • Kimi k2.6 LeetCode 3003. 执行操作后的最大分割数量 Go实现
  • 告别重复造轮子:用快马一键生成gptimage2安卓版高效开发模板
  • AI注销不是删除,而是智能遗忘:解析联邦学习+差分隐私双引擎注销架构(附开源POC代码)
  • Kimi k2.6 LeetCode 2972. 统计移除递增子数组的数目 II Python3实现
  • SWAT模型实战踩坑记:.sol文件为空、气象数据缺失?手把手教你诊断与修复
  • 新手福音:用快马平台生成练习项目,轻松理解github协作开发
  • 如何快速构建你的专属离线英语发音库:11万单词MP3音频一键下载指南
  • ContextMenuForWindows11开源项目:彻底解放你的右键菜单生产力
  • 别再乱改my.cnf了!MySQL 8.0+Docker大小写敏感问题的根治方案
  • 2026年近期潍坊行业知名的智能热水龙头生产商怎么选择?专业解析与推荐 - 2026年企业资讯
  • iFakeLocation终极指南:三步完成iOS虚拟定位的完整方案
  • 昌平区如何选购靠谱的近视防控眼镜? - mypinpai
  • 2026微信小程序商城平台深度解析:全链路选型与技术能力实测
  • 告别烂三角!用CGAL的isotropic_remeshing函数一键优化你的3D网格模型
  • hw八股准备
  • 如何用AI视觉技术彻底革新你的象棋学习体验:Vin象棋完整指南
  • 2026年新发布:青岛船员刷题软件机构如何选?这份指南请收好 - 2026年企业资讯
  • 2026年6月有实力的北京丙烷配送公司怎么选推荐榜,工业丙烷/高纯丙烷/焊割丙烷配送公司选择指南 - 海棠依旧大
  • 实战指南:基于快马平台生成RESTful API自动化测试脚本,保障接口质量
  • 2026无锡管道疏通避坑指南:选对专业、靠谱、口碑好公司的硬核逻辑!对维度对比。 - 极速版本
  • 从爱因斯坦求和到深度学习:揭秘张量运算中的‘黑话’(δij与erst符号保姆级解读)
  • OBS LocalVocal终极指南:3步实现本地AI语音识别字幕
  • Bobst 0704151202 NFC25-24T05-15控制器模块
  • 粉底液代加工多少钱,有哪些推荐厂商 - mypinpai
  • 中小企业转型:低成本、零服务器架构接入大模型的商业路径评估
  • 2026年6月评价高的无锡居民搬家公司哪家*榜:五大专业公司选择指南 - 海棠依旧大
  • AiFei 框架在机器人开发领域和边缘计算中的机遇
  • 探讨钢筋混凝土管定制生产的技巧 - mypinpai
  • 2026年现阶段,广东不锈钢圆球销售厂家综合实力深度解析 - 2026年企业资讯