old_contents: # Time : O(logn)
  # Space: O(1)
  #
  # Reverse bits of a given 32 bits unsigned integer.
  #
  # For example, given input 43261596 (represented in binary as
  # 00000010100101000001111010011100), return 964176192 (represented in binary
  # as 00111001011110000010100101000000).
  #
  # Follow up:
  # If this function is called many times, how would you optimize it?
  #
  
  class Solution:
      # @param n, an integer
      # @return an integer
      def reverseBits(self, n):
          result = 0
          for i in xrange(32):
              result <<= 1
              result |= n & 1
              n >>= 1
          return result
              
  if __name__ == '__main__':
    print Solution().reverseBits(1)
  
new_contents: # Time : O(logn) = O(32)
  # Space: O(1)
  #
  # Reverse bits of a given 32 bits unsigned integer.
  #
  # For example, given input 43261596 (represented in binary as
  # 00000010100101000001111010011100), return 964176192 (represented in binary
  # as 00111001011110000010100101000000).
  #
  # Follow up:
  # If this function is called many times, how would you optimize it?
  #
  
  class Solution:
      # @param n, an integer
      # @return an integer
      def reverseBits(self, n):
          result = 0
          for i in xrange(32):
              result <<= 1
              result |= n & 1
              n >>= 1
          return result
              
  if __name__ == '__main__':
    print Solution().reverseBits(1)
  
subject: Update reverse-bits.py