MakeLoveNotWar
本帖最后由 MakeLoveNotWar 于 2021-3-23 08:38 编辑

《位1的个数》是力扣今日打卡的题目,如下:

啊?久违的简单题目!冥思苦想直接最简单的方式解出,
就是直接利用库函数将n的二进制的字符串取出,然后直接按照数组的方式遍历同时对字符串为1的元素计数。

###垃圾代码
对执行结果不太满意,还是去官方取取经吧。结果看了一眼人都傻了。。。
###官方代码
  1. def hammingWeight(self, n: int) -> int:
  2.     ret = 0
  3.     while n:
  4.        n &= n - 1
  5.        ret += 1   
  6. return ret
复制代码
里面的n&=n-1没懂,后来仔细的搜了搜才明白,
首先n&=n-1 即为n=n&n-1的简写方式,而n&n-1是n的二进制和n-1的二进制相与,而两个二进制数相与的运算,就是二进制的每一位相与。是1与0为0;1与1为1;0与0为0。
假设n如果是xxxx10100的话,那么n-1即为xxxx10011,那么n&n-1则为xxxx10000。如此一操作直接消除了第三位的1,相当于每做一次n&=n-1运算既可消除一个二进制数中的一个1,而最后当n变为0时,看下操作了多少次即是其中位1的个数。
这可真的是巧妙极了


最后题目链接奉上,大家也可以做下看看


















∛243
太强了,泥潭人均算法大佬

Cast1e
对算法一窍不通呜呜呜

woodp1anks~
太强了,真是大佬

嗯?Python?我也会啊

永远神
思路一样,转成好比较的形式再判断

Manernian
这题大概两分钟就解决了,我写的C++
class Solution {
public:
    int hammingWeight(uint32_t n) {
        int num=0;
        for(;n>0;){
            num+=n%2;
            n=n/2;
        }
        return num;
    }
};

whatfilmae
用的是什么编程软件

nemo.
图片不见了!

芜湖氵人
图片不见了好兄弟

xkshadow
强了,泥潭人均算法大佬

xkshadow
强了,真是大佬


MakeLoveNotWar
whatfilmae 发表于 2021-3-22 19:29
用的是什么编程软件

力扣在线编辑器