Leetcode-338:比特位计数

描述:
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。

示例 1:

输入: 2
输出: [0,1,1]
示例 2:

输入: 5
输出: [0,1,1,2,1,2]

思路:

首先是一个数减1,对应二进制的变化就是最右的一个1变为0,而这个1右边的所有0变为1,即相当于包括最后一个1在内的右边所有位取反,例如12(1100)减1,得到11(1011),然后再与变化前的数12(1100)进行与&运算,得到8(1000),可以看出经过这样一个运算之后这个数的1的个数减少了一个,所以可以利用这个原理,得到res[i]=res[i&(i-1)]+1

class Solution {
    public int[] countBits(int num) {
        int[] dp = new int[num+1];
        for(int i=1;i<num+1;i++){
            dp[i] = dp[i&(i-1)]+1;
        }
        return dp;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,503评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,625评论 18 399
  • 先有改变的想法,才会遇到能够改变的事和物。 戒烟之后一段日子,自己改变了很多,所以也在想着法子改变一下自己...
    帰零阅读 266评论 0 2
  • 好像所有的結局都是定局 她回不來了 我記不起了 恍若人生愛恨浮雲 離別不知與何人說
    劉傲寒阅读 189评论 0 0
  • 6.周杰伦 周杰伦是许多80后、90后的回忆,他平时也非常的喜欢打篮球,并且在多个和科比合作制作MV,这样的能力还...
    TimeJumper阅读 915评论 0 0

友情链接更多精彩内容