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
谢谢保罗!是的,这是有效的。我猜python会在返回后忽略行,如果最后没有“\” –