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; }