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

Kimi LeetCode 3621. 位计数深度为 K 的整数数目 I Python3实现

LeetCode 3621. 位计数深度为 K 的整数数目 I Python3 实现

```python
from functools import lru_cache

class Solution:
def popcountDepth(self, n: int, k: int) -> int:
# k=0:只有 1 的深度为 0
if k == 0:
return 1 if n >= 1 else 0

# 预处理 1~60 的 popcount-depth
# n <= 1e15 < 2^50,popcount 最大不超过 50
def get_depth(x: int) -> int:
if x == 1:
return 0
return 1 + get_depth(bin(x).count('1'))

# 找出所有满足 depth(c) == k-1 的 popcount 值 c
targets = [i for i in range(1, 61) if get_depth(i) == k - 1]

if not targets:
return 0

bits = bin(n)[2:] # n 的二进制表示
m = len(bits)
ans = 0

for c in targets:
# 数位 DP:统计 [0, n] 中二进制恰好有 c 个 1 的数的个数
@lru_cache(maxsize=None)
def dfs(i: int, j: int, tight: bool) -> int:
if j > c:
return 0 # 1 的个数已超,剪枝
if i == m:
return 1 if j == c else 0

limit = int(bits[i]) if tight else 1
total = 0
for d in range(limit + 1):
total += dfs(i + 1, j + d, tight and d == limit)
return total

ans += dfs(0, 0, True)
dfs.cache_clear() # 清除缓存,为下一个 c 做准备

# k=1 的特殊处理:popcount=1 包含 x=1,但 depth(1)=0,需排除
if k == 1:
ans -= 1

return ans
```

---

核心思路

步骤 说明
深度定义 `D(1) = 0`,`D(x) = 1 + D(popcount(x))`(`x > 1`)
目标转化 `D(x) = k` ⟺ `popcount(x) = c` 且 `D(c) = k - 1`
预处理 对 `1 ~ 60` 预计算深度,找出所有合法的 `c`
数位 DP 对每个 `c`,统计 `[1, n]` 中二进制恰好有 `c` 个 1 的整数个数
边界修正 `k = 1` 时,`c = 1` 会把 `x = 1` 算进去,但 `D(1) = 0`,需减去

时间复杂度: `O(log² n)`(数位 DP 状态数 `O(log n)`,二分/枚举 `c` 的个数很少)

空间复杂度: `O(log² n)`(`lru_cache` 记忆化)

http://www.jsqmd.com/news/1216526/

相关文章:

  • 顶会论文的产品化落地路径:从论文伪代码到生产级Feature的工程评估体系
  • 2026年华东地区激光熔覆厂家联系方式盘点测评 - 奔跑123
  • 2026年口碑好的空气悬浮鼓风机厂家中立推荐参考指南 - 奔跑123
  • 二级市场核心认知误区全景拆解:别怕空仓、拒绝踏空焦虑,只赚确定性收益 / 会买是徒弟,会卖是师傅,会空仓才是交易祖师爷
  • 2026年7月18日更新:ChatGPT Plus / Pro 与 Codex——AI Agent 的上下文工程:为什么未来程序员竞争的是“信息组织能力”(GPT-5.6 最新技术分享)
  • 2026年高新区学生配镜现状:可靠服务商深度分析与决策指南 - 品牌鉴赏官2026
  • 2026年7月最新广东东莞主营坦克链电缆优质企业排行名录 - 奔跑123
  • 2026年唐山优秀竖炉制造厂推荐:探访唐山新拓科技有限公司 - 品牌鉴赏官2026
  • WAIC 2026 展会快讯 | 东软添翼医疗健康智能化解决方案2.0,全场景落地三甲医院内部
  • JavaScript 常用字符串方法详解(附实战代码)
  • 2026年深度体验之旅:留坝地道美食路线规划 - 品牌鉴赏官2026
  • 2026金华找寻靠谱GEO优化机构的日常经验分享 - 奔跑123
  • 2026 年新消息:锡林郭勒盟口碑好的K歌沐足整体隔音减震施工队哪家可靠,别再忍受吵闹!这套方案如何彻底拯救你的K歌体验? - 实业推荐官【官方】
  • 鸿蒙 ArkTS 实战:Menu Nutrition Advice 从智能助手到保存闭环完整解析
  • AI 电动窗帘电机智能功率 精准控制 完整选型方案
  • 浪琴官方售后服务中心地址及24小时服务电话实地考察报告_多信源验证(2026年7月最新) - 浪琴服务中心
  • 基于遗传算法的梯级水电站群联合火电厂优化调度研究(Python代码实现)
  • 2026 年武隆比较好的乳酸菌回收工厂哪家可靠,揭秘:乳酸菌回收如何颠覆你的健康投资? - 领域鉴赏官
  • 2026优选浙江家电继电器采购全场景适配指南 - 奔跑123
  • 原生JS手写轮播图(超详细保姆级教程)
  • Kimi LeetCode 3621. 位计数深度为 K 的整数数目 I JavaScript实现
  • 2026年大型化FD干燥机品牌综合实力排行盘点 - 奔跑123
  • 2026银行招聘培训优质机构推荐榜 - 互联网科技品牌测评
  • 2026 年开鲁热门的编码器组装机供应商深度解析与优选指南,揭秘!一个工具如何让你的生产效率翻倍 - 行业推荐官【官方】
  • 深圳劳力士回收价格查询和各大回收平台实测排行(2026年7月最新) - 天价名表回收平台
  • 深圳正规墨西哥物流公司盘点:5家合规服务商全维度解析 - 奔跑123
  • 【无线电】认知无线电网络中协作频谱感知研究(Matlab代码实现)
  • 冷链运输用干冰生产厂商联系方式获取及合规采购指引 - 热点品牌推荐
  • 劳力士中国官方售后服务中心|全部网点地址与热线权威信息公示(2026年7月更新) - 劳力士服务中心
  • 天津欧米茄回收价格查询和各大回收平台实测排行(2026年7月最新) - 诚收名表回收平台