尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Kimi    LeetCode 3621. 位计数深度为 K 的整数数目 I JavaScript实现
📅 发布时间:2026/7/19 0:55:54

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

```javascript
/**
* @param {number} n
* @param {number} k
* @return {number}
*/
var popcountDepth = function(n, k) {
// k=0:只有 1 的深度为 0
if (k === 0) {
return n >= 1 ? 1 : 0;
}

// 计算一个整数的 popcount(二进制 1 的个数)
const popcount = (x) => {
let cnt = 0;
while (x > 0) {
cnt += (x & 1);
x >>= 1;
}
return cnt;
};

// 预处理 1~60 的 popcount-depth
const depthMemo = new Array(65).fill(-1);
depthMemo[1] = 0;

const getDepth = (x) => {
if (x === 1) return 0;
if (depthMemo[x] !== -1) return depthMemo[x];
depthMemo[x] = 1 + getDepth(popcount(x));
return depthMemo[x];
};

// 找出所有满足 depth(c) == k-1 的 popcount 值 c
const targets = [];
for (let i = 1; i <= 60; i++) {
if (getDepth(i) === k - 1) {
targets.push(i);
}
}

if (targets.length === 0) return 0;

const s = n.toString(2); // n 的二进制字符串
const m = s.length;
let ans = 0;

for (const c of targets) {
// memo[pos][ones]:仅非 tight 状态有效
const memo = Array.from({ length: m }, () => new Array(c + 1).fill(null));

const dfs = (pos, ones, tight) => {
if (ones > c) return 0; // 1 的个数已超,剪枝
if (pos === m) {
return ones === c ? 1 : 0;
}

if (!tight && memo[pos][ones] !== null) {
return memo[pos][ones];
}

const limit = tight ? parseInt(s[pos]) : 1;
let res = 0;

for (let d = 0; d <= limit; d++) {
res += dfs(pos + 1, ones + d, tight && (d === limit));
}

if (!tight) {
memo[pos][ones] = res;
}
return res;
};

ans += dfs(0, 0, true);
}

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

return ans;
};
```

---

JavaScript 实现要点

要点 说明
`n.toString(2)` 将 `n` 转为二进制字符串,作为数位 DP 的上界
手动记忆化 用二维数组 `memo[pos][ones]` 存储非 `tight` 状态的结果(`null` 表示未计算)
闭包递归 `dfs` 作为闭包捕获 `s`、`m`、`c`、`memo`,避免全局污染
类型安全 `n ≤ 10¹⁵ < 2⁵³`,JavaScript `number` 可精确表示,无需 `BigInt`
k=1 修正 `popcount = 1` 会把 `x = 1` 算入,但其深度为 0,需减去

时间复杂度: `O(log² n)`

空间复杂度: `O(log² n)`

相关新闻

  • 2026银行招聘培训优质机构推荐榜 - 互联网科技品牌测评
  • 2026优选浙江家电继电器采购全场景适配指南 - 奔跑123
  • 冷链运输用干冰生产厂商联系方式获取及合规采购指引 - 热点品牌推荐

最新新闻

  • Python流程控制精要:if/else与循环实战指南
  • 网络请求(NSURL、NSURLRequest、NSURLSessionDataTask、协议回调与 JSON 数据的基本流向)
  • SpringBoot+Vue 社区物资交易互助平台管理平台源码【适合毕设/课设/学习】Java+MySQL
  • Arduino UNO开发指南:从硬件架构到智能小车实战
  • 开发工具从神器到闲置:技术适配与团队协作的落地实践
  • Skills、MCP 和 Memory 分别解决什么问题?

日新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号