2017-06-08 6 views
0

32ビット整数の1の数を計算する単純な関数の場合、入力-1では32を返しますが、代わりに12を返します。-1のカウント桁数は32の代わりに12を返します

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] 

しかし、varを使用して結果を格納し、split plusを複数の部分にすると、正解が返されます。どうして?

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は戻り後に行を無視すると思います –

関連する問題