leetcode Counting Bits
2016-08-01 16:40
267 查看
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
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.
假设最右的1位于m位,
(n-1)是把m位左边的数取反,右边的数保留。
(n-1)&n 就可以将m位左边的数保留,右边的数抹掉(取反后相与=0)。重复此操作,直到m=0即可遍历出二进制表达式中所有的1.
return them as an array.
Example:
For
num = 5you 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.
假设最右的1位于m位,
(n-1)是把m位左边的数取反,右边的数保留。
(n-1)&n 就可以将m位左边的数保留,右边的数抹掉(取反后相与=0)。重复此操作,直到m=0即可遍历出二进制表达式中所有的1.
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */ int NumOf1(int n){ int count =0 ; while(n) { count++; n = (n - 1) & n; } return count; } int* countBits(int num, int* returnSize) { *returnSize = num+1; int *ptr = (int *)malloc((sizeof(int))*(num+1)); for(int i=0;i<=num;i++) { ptr[i] = NumOf1(i); } return ptr; }
相关文章推荐
- Leetcode Counting Bits
- LeetCode Counting Bits
- leetcode 338 c++. Counting Bits
- LeetCode "Counting Bits"
- leetcode Counting Bits
- leetcode 338 Counting Bits C++
- leetcode之counting bits改进算法
- leetcode oj java Counting Bits
- Leetcode Counting Bits 338
- leetcode338 Counting Bits Java
- Counting Bits leetcode 338
- LeetCode Counting Bits
- LeetCode Counting Bits
- counting 1 bits SPOILER
- (LeetCode 191) Number of 1 Bits
- [leetcode] 191. Number of 1 Bits
- leetcode :Number of 1 Bits
- LeetCode190. Reverse Bits
- LeetCode 191. Number of 1 Bits
- LeetCode: 338. Counting Bits