比特位计数 2025-08-07 作者 Y Y 835 字 本文最后编辑于 前,其中的内容可能需要更新。 比特位计数 题目 1234567891011121314151617181920给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案示例 1:输入:n = 2输出:[0,1,1]解释:0 --> 01 --> 12 --> 10示例 2:输入:n = 5输出:[0,1,1,2,1,2]解释:0 --> 01 --> 12 --> 103 --> 114 --> 1005 --> 101 解法 123456789101112131415161718192021222324252627思路:重点在于获取比特位的算法 $k & ($k - 1),二进制数-1 与 原来的数字,得到去掉末尾的1的结果例如:1101 & 1100 = 1100 -> 1100 & 1011 = 1000 -> 1000 & 0111 = 0000,重复三次就是三个1代码:/** * @param Integer $n * * @return Integer[] */function countBits($n){ $res = [0]; for ($i = 1; $i <= $n; $i++) { $num = 0; $k = $i; while ($k) { // 每次去掉末尾一个1,直到$k=0为止 $k = $k & ($k - 1); $num++; } $res[] = $num; } return $res;} < 上一篇 下一篇 >