leetcode-338. Counting Bits
2016-09-02
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].
原题地址
这是一道很简单的找规律题,这里想说下如何寻找规律。核心的思想是去掉一位,因为去除一位之后的数我们是求过的。去除的方法有很多,这里举几个例子:
- 去除最低位:右移即可,然后判断末位是否为1. f[i] = f[i >> 1] + i & 1;
- 去除最低位的1:f[i] = f[i & (i - 1)] + 1;
- 去除最高位的1:维护一个2^n的数,使2^n <= i < 2^(n + 1),那么f[i] = f[i - 2^n] + 1;
总之需要记住要跟去掉一位之后的数进行比较。