news 2026/4/23 11:39:24

Counting Bits LeetCode 高效解法解析与位运算技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Counting Bits LeetCode 高效解法解析与位运算技巧

Counting Bits是LeetCode第338题,要求计算从0到给定整数n之间每个数字的二进制表示中1的个数。这个问题看似简单,但高效解法涉及位运算和动态规划的巧妙结合,是面试中考察候选人算法思维能力的经典题目。

counting bits leetcode题目是什么意思

这道题给定一个非负整数n,需要返回一个长度为n+1的数组,其中第i个元素表示数字i的二进制形式中1的个数。例如,当n=5时,二进制表示分别为0(0), 1(1), 2(10), 3(11), 4(100), 5(101),所以应该返回[0,1,1,2,1,2]。题目要求时间复杂度尽可能低,避免对每个数字单独计算。

理解题目后,最直接的思路是对每个数字计算其二进制中1的个数,但这会导致O(nsizeof(integer))的时间复杂度。在实际面试中,面试官通常期待更优的解法,这就需要我们深入分析数字二进制表示的内在规律。

counting bits leetcode如何高效解决

高效解决Counting Bits问题的关键在于发现相邻数字二进制表示之间的关系。通过观察可以发现,对于任意偶数i,其二进制中1的个数等于i/2的二进制中1的个数,因为偶数二进制最后一位是0,右移一位相当于除以2。对于奇数i,其二进制中1的个数等于i/2的二进制中1的个数加1。

基于这个规律,我们可以推导出状态转移方程:bits[i] = bits[i>>1] + (i & 1)。这里i>>1表示i右移一位(即除以2),i & 1用于判断i是否为奇数。这种方法只需一次遍历即可完成计算,时间复杂度为O(n),空间复杂度也为O(n)。

counting bits leetcode动态规划解法

上述解法本质上是一种动态规划思路,其中bits[i]表示状态,即数字i的二进制中1的个数。状态转移基于已计算的较小数字的结果,充分利用了子问题的解。具体实现时,初始化bits[0]=0,然后从1遍历到n,根据状态转移方程计算每个bits[i]。

在实际编码中,这个解法非常简洁高效。Python实现只需几行代码:def countBits(n): bits = [0]

(n+1); for i in range(1, n+1): bits[i] = bits[i>>1] + (i & 1); return bits。这种解法不仅高效,而且体现了将问题分解为子问题并重复利用结果的动态规划核心思想。

你在解决Counting Bits问题时是否考虑过其他优化方法?在实际面试中遇到这道题,你通常会如何向面试官解释解题思路?欢迎在评论区分享你的经验和看法,如果觉得这篇文章有帮助,请点赞和分享给更多正在准备技术面试的朋友。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:41:32

PHP教程哪里下载靠谱?新手老手选指南

对于想要学习PHP编程的朋友来说,找到一份合适的教程是成功的第一步。网上资源虽多,但质量参差不齐,盲目下载不仅浪费时间,还可能学到错误过时的知识。本文将帮你梳理如何高效、安全地获取有价值的PHP学习材料。 PHP教程下载有哪些…

作者头像 李华
网站建设 2026/4/18 7:32:24

V++编程语言详解:高性能开发新选择

V是一种近年来受到开发者关注的编程语言,它以简洁的语法、出色的性能和安全特性为主要设计目标。作为一种系统级编程语言,它在保持高性能的同时,致力于提供比传统语言更好的开发体验和更少的错误。对于需要兼顾性能和开发效率的项目来说&…

作者头像 李华
网站建设 2026/4/20 16:28:00

GetDlgItem函数用法与MSDN查阅技巧详解

在Windows桌面应用程序开发中,GetDlgItem是一个基础且频繁使用的API函数,而MSDN则是我们获取权威技术文档的主要来源。理解GetDlgItem的工作原理并掌握高效查阅MSDN的方法,能显著提升对话框资源管理和控件操作的开发效率。本文将围绕这两个核…

作者头像 李华
网站建设 2026/4/17 17:49:58

JS多维数组怎么遍历?两种方法详细教程

在JavaScript开发中,我们经常会遇到像矩阵、表格数据或嵌套配置这类结构,它们通常用多维数组(数组的数组)来表示。掌握高效、清晰的遍历方法,是处理这些数据的基础。无论你是要求和、查找还是转换数据,遍历…

作者头像 李华
网站建设 2026/4/20 0:44:51

用GPEN镜像做了个人像增强项目,附完整步骤

用GPEN镜像做了个人像增强项目,附完整步骤 1. 为什么选GPEN做我的人像增强项目 最近在整理老照片时,发现不少珍贵的人像图存在模糊、噪点、轻微划痕甚至轻微失焦的问题。试过手机APP一键修复,效果浮于表面;也跑过几个开源超分模…

作者头像 李华
网站建设 2026/4/18 10:25:18

学霸同款2026 AI论文软件TOP8:开题报告神器测评

学霸同款2026 AI论文软件TOP8:开题报告神器测评 学术写作工具测评:2026年TOP8榜单深度解析 在科研与学术写作日益数字化的今天,AI论文软件已成为研究生和研究人员不可或缺的辅助工具。面对市场上琳琅满目的选择,如何快速找到适合…

作者头像 李华