剑指 Offer 15. 二进制中1的个数

剑指 Offer 15. 二进制中1的个数

Offer 15

  • 题目描述:

  • 方法一:使用1逐位相与的方式来判断每位是否为1

/**
 * 方法一:使用1逐位与的方法
 */
public class Offer_15 {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int sum = 0;
        while(n != 0){ // 这里不是n > 0作为边界条件
            sum += n & 1;
            n >>>= 1; // >>>符号表示无符号右移,而>>表示有符号右移
        }
        return sum;
    }
}
  • 方法二:使用n & (n-1)的方法来每次将最低位的1变为0,直到n变成0。从而得出最终有多少个1.
/**
 * 方法二:使用n & (n-1)的方法将最低位的1逐次化为0
 */
class Offer_15_1 {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int sum = 0;
        while(n != 0){ // 这里不是n > 0作为边界条件
            sum += 1;
            n  =  n & (n-1); // >>>符号表示无符号右移,而>>表示有符号右移
        }
        return sum;
    }
}
posted @ 2021-01-25 10:41  Garrett_Wale  阅读(77)  评论(0编辑  收藏  举报