原题链接在这里:https://leetcode.com/problems/number-of-1-bits/
题目:
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011
, so the function should return 3.
题解:
Bit manipulation每次右移一位 & 1.
unsigned number 右移 >>>. signed number 右移>>.
也可以使用Integer.bitCount() function.
Time Complexity: O(1). Space: O(1).
AC Java:
1 public class Solution { 2 // you need to treat n as an unsigned value 3 public int hammingWeight(int n) { 4 //Method 1 5 // int count = 0; 6 // for(int i = 0; i<32; i++){ 7 // count += (n>>>i)&1; 8 // } 9 // return count; 10 11 //Method 2 12 int count = 0; 13 while(n != 0){ 14 count += (n&1); 15 n = n>>>1; 16 } 17 return count; 18 } 19 }
Method 3 是通过 n & (n-1)消掉最右侧的一个1.
消掉一个1, 对应的res就加一。
AC Java:
1 public class Solution { 2 // you need to treat n as an unsigned value 3 public int hammingWeight(int n) { 4 //Method 3 5 int res = 0; 6 while(n!=0){ 7 n = n & n-1; 8 res++; 9 } 10 return res; 11 } 12 }