338. Counting Bits **
2016-08-10 15:24
218 查看
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.
Method1:
https://discuss.leetcode.com/topic/53702/28ms-c-solution-o-n-time-o-n-space
Method2: https://discuss.leetcode.com/topic/44008/5-lines-of-python-o-n-time-simple-no-bitwise-operation/2
Method3: https://discuss.leetcode.com/topic/40162/three-line-java-solution/25
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.
Method1:
https://discuss.leetcode.com/topic/53702/28ms-c-solution-o-n-time-o-n-space
def countBits0(self, num): """ :type num: int :rtype: List[int] """ result = [ 0 for i in range(num+1)] result[0]= 0 i=1 while i<=num : cnt=i cnt&=(cnt-1) result[i] = result[cnt]+1 i +=1 return result
Method2: https://discuss.leetcode.com/topic/44008/5-lines-of-python-o-n-time-simple-no-bitwise-operation/2
def countBits(self, num): r = [0]*(num+1) a = 1 for i in range(1, num+1): r[i]=r[i-a]+1 if i == 2*a - 1: a *= 2 return rr.append is slower
Method3: https://discuss.leetcode.com/topic/40162/three-line-java-solution/25
def countBits(self, num): result = [0]*(num+1) for i in range (1,num+1): result[i]= result[i>>1]+(i&1) return resultMethod4: https://discuss.leetcode.com/topic/41785/simple-java-o-n-solution-using-two-pointers
def countBits(self,num): result = [0]*(num+1) result[0] = 0 power =1 for i in range(1,num+1): if (i==power): power *=2 t=0 result[i]=result[t]+1 t +=1 return result
相关文章推荐
- 338. Counting Bits #Medium
- Counting 1-bits
- leetcode Counting Bits
- leetcode 338 Counting Bits C++
- 十三周 Dynamic programming counting bits
- LeetCode Counting Bits
- counting 1 bits C implementations
- leetcode oj java Counting Bits
- The best method for counting bits in a 32-bit integer
- leetcode Counting Bits
- leetcode 338 c++. Counting Bits
- counting 1 bits SPOILER
- The best method for counting bits in a 32-bit integer(2)
- Leetcode Counting Bits 338
- Counting Bits leetcode 338
- Counting-the-number-of-set-bits-in-an-integer
- leetcode之counting bits改进算法
- 106.Counting Bits
- LeetCode Counting Bits
- Leetcode Counting Bits