LeetCode 191 Number of 1 Bits

一、首先最暴力解法-直接转换为2进制然后数bit位为1的数量

1 int solution1(uint32_t n) {
2         int ans = 0;
3         do{
4             if(n%2==1) ans++;
5             n = n/2;
6         }while(n!=0);
7         return ans;
8     }

 

二、每一次操作通过(n&(n-1))将二进制最后一个1变为0,n为0的时候结束

例如:10 => (...01010) ans=0

  10&9 = (...01010)&(...01001) =>(01000) ans+=1

  8&7 = (...01000) &(...00111) =>(0) ans+=2

这样返回2

 1     //不断将二进制的最低1位变为0
 2     //如n=9 => 0000...01001
 3     //n&(n-1) => (000...01001)&(000...01000) => (000...01000) 8
 4     //每一次 n*(n-1)都会把n的二进制最后一个为1bit变为0,然后1bit的个数ans+1
 5     int solution2(uint32_t n){
 6         int ans = 0;
 7         while(n!=0){
 8             n = n&(n-1);
 9             ans++;
10         }
11         return ans;
12     }

 

三、直接不断做右移操作,判断最后一位是否为1,怎么判断最后为1,直接n&1看结果是0还是1,1肯定最后一位就是1了,如果是0,最后一位肯定就是0了

//不断右移,判断最低位是否为1(n与1进行与操作),最多32次位操作就可以判断
int solution3(uint32_t n){
   int ans = 0;
   while(n){
        ans+= n&1;
        n = n>>1;      
    } 
   return ans; 
}

 

posted @ 2015-12-03 16:36  Acker  阅读(152)  评论(0编辑  收藏  举报