2017-06-08 39 views
0

对于以下用于计算32位整数中1的数目的简单函数,预计返回32代表输入-1,但代之以12。为-1返回的计数位数为12而不是32

class Solution: 
    def bitNum(self, n): 
     bm = { 
      0:0, 1:1, 2:1, 3:2, 4:1, 5:2, 6:2, 7:3, 
      8:1, 9:2, 10:2, 11:3, 12:2, 13:3, 14:3, 
      15:4 
      } 
     return bm[n & 0xF] + bm[(n>>4) & 0xF] + bm[(n>>8) & 0xF] 
     + bm[(n>>12) & 0xF] + bm[(n>>16) & 0xF] + bm[(n>>20) & 0xF] 
     + bm[(n>>24) & 0xF] + bm[(n>>28) & 0xF] 

但是,如果一个变量用于存储结果,并分裂加上几个部分,将返回正确的答案。为什么?

class Solution: 
    def bitNum(self, n): 
     bm = { 
      0:0, 1:1, 2:1, 3:2, 4:1, 5:2, 6:2, 7:3, 
      8:1, 9:2, 10:2, 11:3, 12:2, 13:3, 14:3, 
      15:4 
      } 
     bits = bm[n & 0xF] 
     bits += bm[(n>>4) & 0xF] + bm[(n>>8) & 0xF] 
     bits += bm[(n>>12) & 0xF] + bm[(n>>16) & 0xF] + bm[(n>>20) & 0xF] 
     bits += bm[(n>>24) & 0xF] + bm[(n>>28) & 0xF] 
     return bits 

回答

2

可能包围所有'('和')'? :) 或在行结束时使用反斜杠:

return (a + b 
+ c + d) 
+0

谢谢保罗!是的,这是有效的。我猜python会在返回后忽略行,如果最后没有“\” –

相关问题