zoukankan      html  css  js  c++  java
  • 338. Counting Bits

    Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.

    Example:
    For num = 5 you should return [0,1,1,2,1,2].

    Follow up:

      • It is very easy to come up with a solution with run time O(n*sizeof(integer)). But can you do it in linear time O(n) /possibly in a single pass?
      • Space complexity should be O(n).
      • Can you do it like a boss? Do it without using any builtin function like __builtin_popcount in c++ or in any other language.

    题目含义:统计二进制数字num以内每个数中‘1’的个数

     1     
     2     int countbit(int i)
     3     {
     4         //无关trick   i&(i - 1), 这个本来是用来判断一个数是否是2的指数的快捷方法,比如8,二进制位1000, 那么8&(8-1)为0,只要为0就是2的指数
     5 //        按照定义做, x&(x-1)可以消去最右边的1
     6         int count = 0;
     7         while(i>0)
     8         {
     9             i &= (i-1);
    10             count ++;
    11         }
    12         return count;
    13     }
    14     
    15     public int[] countBits(int num) {
    16         int[] res = new int[num+1];
    17         if (num == 0) return res;
    18         res[0] = 0;
    19         for (int i=1;i<=num;i++)
    20         {
    21 //            res[i] = countbit(i);//解法一
    22             res[i] = res[i & (i - 1)] + 1;//每个i值都是i&(i-1)对应的值加1
    23         }
    24         return res;       
    25     }
  • 相关阅读:
    v-cloak
    MVVM
    初识ajax
    装瓶学习法
    回调函数(call back)
    如何让学习变得纯粹?
    异步
    grep用法
    Shell中的&&与||的区别
    shell中使用>/dev/null 2>&1 丢弃信息
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7693842.html
Copyright © 2011-2022 走看看