原题365描述:
计算在一个 32 位的整数的二进制表式中有多少个 1.
您在真实的面试中是否遇到过这个题? Yes 样例给定 32 (100000),返回 1
给定 5 (101),返回 2
给定 1023 (111111111),返回 9
挑战If the integer is n bits with m 1 bits. Can you do it in O(m) time?
标签 比特位操作 二进制原题181描述:
如果要将整数A转换为B,需要改变多少个bit位?
Both n and m are 32-bit integers.
您在真实的面试中是否遇到过这个题? Yes 样例如把31转换为14,需要改变2个bit位。
(31)10=(11111)2
(14)10=(01110)2
标签 比特位操作 Cracking The Coding Interview
题目分析:
如两题均为二进制操作,使用python内置函数bin(number)转化为二进制处理
注意题目要求32位二进制表示,需要补0或1。
源码:
1 2 3 4 5 6 7 8 9 10 class Solution: # @param num: an integer # @return: an integer, the number of ones in num def countOnes( self , num): # write your code here twoStr = bin (num).replace( '0b' ,'') if twoStr[ 0 ] = = '-' : return 32 - twoStr.count( '0' ) else : return twoStr.count( '1' )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class Solution: """ @param a, b: Two integer return: An integer """ def bitSwapRequired( self , a, b): # write your code here if a = = b : return 0 # 负数补1至32位 if a < 0 : strA = bin (a).replace( '-0b' ,'') strA = ( 32 - len (strA)) * '1' + strA else : # 整数补0至32位 strA = bin (a).replace( '0b' ,'') strA = ( 32 - len (strA)) * '0' + strA if b < 0 : strB = bin (b).replace( '-0b' ,'') strB = ( 32 - len (strB)) * '1' + strB else : strB = bin (b).replace( '0b' ,'') strB = ( 32 - len (strB)) * '0' + strB n = len (strA) count = 0 for i in range ( - 1 , - n - 1 , - 1 ): if strA[i] ! = strB[i]: count + = 1 return count