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

Kimi LeetCode 3677. 统计二进制回文数字的数目 Java实现

让我先搜索 LeetCode 3677 的题目详情。

这是可以直接提交到 LeetCode 的完整 Java 实现:

```java
class Solution {
public int countBinaryPalindromes(long n) {
if (n == 0) {
return 1;
}

int count = 1; // 0 是回文数
int m = getBinaryLength(n); // n 的二进制位数

// 1. 统计二进制位数小于 m 的所有回文数
// 长度为 i 的二进制回文数个数 = 2^((i-1)/2)
for (int i = 1; i < m; i++) {
count += 1 << ((i - 1) / 2);
}

// 2. 统计二进制位数等于 m 且不超过 n 的回文数
int mid = m / 2; // 左半部分的长度(奇数时包含中间位)

// 从左半部分的最高位向中间遍历
// 如果 n 的某一位是 1,我们可以把它改成 0,剩下的位可以任意填
for (int i = m - 2; i >= mid; i--) {
if ((n & (1L << i)) != 0) {
// 当前位填 0(比 n 小),剩余可自由填的位数产生的回文数个数
count += 1 << (i - mid);
}
}

// 3. 检查 n 本身(或其左半部分生成的回文数)是否 ≤ n
long left = n >> mid; // 提取左半部分(含中间位,如果是奇数长度)
long palindrome = (m % 2 != 0) ? (left >> 1) : left; // 构造回文数的左半镜像基础

// 将左半部分镜像到右边,构造完整的回文数
while (left > 0) {
palindrome = (palindrome << 1) + (left & 1);
left >>= 1;
}

if (palindrome <= n) {
count++;
}

return count;
}

// 计算 n 的二进制表示长度(不含前导零)
private int getBinaryLength(long n) {
int length = 0;
while (n > 0) {
n >>= 1;
length++;
}
return length;
}
}
```

核心思路

步骤 说明
1. 特判 0 `0` 的二进制是 `"0"`,是回文数,直接返回 1
2. 统计短位数回文 长度为 `i` 的二进制回文数,首位必为 1,左半部分(含中间位)有 `(i-1)/2` 个自由位,共 `2^((i-1)/2)` 个
3. 统计同位数回文 从高位到低位遍历 `n` 的左半部分。遇到 `1` 时,将其改为 `0`,剩余自由位可任意填,累加方案数
4. 检查 n 本身 用 `n` 的左半部分构造回文数,若 ≤ n 则计数 +1

复杂度

- 时间:`O(log n)`,只遍历 `n` 的二进制位
- 空间:`O(1)`

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

相关文章:

  • 凝胶冰袋机品牌厂商厂家电话广东源头采购实用指引 - 热点品牌推荐
  • 毕业设计:基于SpringBoot和Vue的图书推荐系统(源码)
  • 万国福州**最新公告:2026年7月网点地址与客户服务热线及售后信息全览 - 万国中国官方服务中心
  • 2026年福建地下车库重载级耐磨自流平源头厂家哪家靠谱 - 热点品牌推荐
  • flink rocksdb 配置memtable大小
  • 火焰图实战复盘:一次生产环境 CPU 100% 的 72 小时排障全记录
  • 万国**更换原装表带价格查询|完整地址与售后热线**信息公告(2026年7月最新) - 万国中国官方服务中心
  • 09-媒体访问控制
  • 2026年工商业节能电机节能改造厂如何选才更稳妥靠谱 - 热点品牌推荐
  • B2405S-1WR3 适配优选 DF1-24S05S|工业 DC-DC 模块电源硬件选型技术分析
  • 芝柏**更换原装表带价格查询|全部网点地址及24小时热线**信息公告(2026年7月最新) - 亨得利官方服务中心
  • AI 代码审查在安全合规场景的实践:GDPR、SOC2 相关的前端风险扫描
  • 智慧养老服务平台|Java|SpringBoot|Vue|前后端分离(源码)
  • 计算机毕业设计之基于springboot的体检服务系统的设计与实现
  • 上海房产纠纷知名律师 二手房买卖 违约 过户君澜孙青律师团队 - 孙青律师13681945561
  • 2026辽宁高考350想学机械设计制造及其自动化专业推荐报考大学 - 2027品牌AI展
  • kafka broker不设置分区key,会将同一topic的消息存放到不同的分区,但读取数据不能将不同分区的数据一次性查询出来怎么解决
  • 仪器管理系统|Java|Spring Boot|Vue3|前后端分离|MySQL(源码)
  • 计算机毕业设计之基于SpringBoot的乡镇普法宣传系统设计与实现
  • 2026年乌鲁木齐废旧金属回收哪家好?5家专业回收企业推荐 - 本地品牌推荐
  • 2026年半自动开平机加工厂家靠谱选型实用参考指南 - 热点品牌推荐
  • RAG 在投研报告生成中的应用:多源研报的检索与融合
  • 萧邦中国**售后服务中心|完整地址及售后服务热线**信息公告(2026年7月更新) - 萧邦中国官方服务中心
  • Kimi LeetCode 3677. 统计二进制回文数字的数目 Python3实现
  • 教育类前端交互设计复盘:一个答题组件的七次迭代与最终收敛方案
  • 2026精选:台山制造业领域实力供应厂家深度解析 - 甄选服务推荐
  • 孤能子视角:思维的“波纹”与“场域”:从脑科学、大模型到外星人交流的语言演化论
  • 2026年高明不锈钢/铝合金厂家**:精密加工与表面处理技术领先品牌推荐 - 甄选服务推荐
  • 2026年尾矿库GIS智能系统选型指南:聚焦口碑与实力 - 品牌鉴赏官2026
  • Mathup:便捷 MathML 创作工具,高效实现数学表达式编写与转换!