常写常忘 - hammingWeight

2020-05-05  本文已影响0人  砂壶

算法刷题系列:
https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/solution/mian-shi-ti-15-er-jin-zhi-zhong-1de-ge-shu-wei-yun/

方法一:逐位判断
判断 n最右一位是否为 1,根据结果计数。
将 n右移一位(本题要求把数字 n 看作无符号数,因此使用 无符号右移 操作)

/**
 * @param {number} n - a positive integer
 * @return {number}
 */
var hammingWeight = function(n) {
    let mask = 1;
    let count = 0;
    for(let i = 0; i<32; i++) {
        if((mask & n) != 0) {
            count++;
        }
        n >>= 1;
    }
    return count;
};

方法二:巧用 n & (n - 1)
n&(n−1) 解析: 二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1 。

/**
 * @param {number} n - a positive integer
 * @return {number}
 */
var hammingWeight = function(n) {
    let count = 0;
    while(n!=0) {
        count++;
        n = n&(n-1);
    }
    return count;
};

(写了几次总是忘记,用的位操作符很不熟悉,需要反复练习)
关于按位操作符:https://www.jianshu.com/p/41fc061407ca

上一篇 下一篇

猜你喜欢

热点阅读