LintCode181将整数A转换为B

xiaoxiao2021-02-28  1

原题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
转载请注明原文地址: https://www.6miu.com/read-1750274.html

最新回复(0)