輸入一個整數,輸出該數二進制表示中 1 的個數。java
移位運算:spa
public class Solution { public int NumberOf1(int n) { int cnt = 0; //計數器 while (n != 0) { //計數器不等於 0 cnt++; //計數器加一 n &= (n - 1); //若是當前位是1,則計數器加1 } return cnt; } }
這應該是目前的最優解了。code
其複雜度僅僅與給定的數的1的個數有關。io
1111000 - 1 = 1110111class
一個二進制數減1的試過是他全部的1中最低位的1變成0,他後面的0變成1,因此將n&(n-1),就會將最低位的1變位0,不斷的循環直到把n中全部的1都替換爲0便可。循環
11000101010,須要5此循環。其複雜度O(M),M爲給定的數的1的個數。技巧