本帖最后由 MakeLoveNotWar 于 2021-3-23 08:38 编辑 
《位1的个数》是力扣今日打卡的题目,如下:
 
 
—
啊?久违的简单题目!冥思苦想直接最简单的方式解出,
就是直接利用库函数将n的二进制的字符串取出,然后直接按照数组的方式遍历同时对字符串为1的元素计数。
###垃圾代码
###官方代码复制代码里面的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的个数。
这可真的是巧妙极了
最后题目链接奉上,大家也可以做下看看
《位1的个数》是力扣今日打卡的题目,如下:
 
啊?久违的简单题目!冥思苦想直接最简单的方式解出,
就是直接利用库函数将n的二进制的字符串取出,然后直接按照数组的方式遍历同时对字符串为1的元素计数。
###垃圾代码
对执行结果不太满意,还是去官方取取经吧。结果看了一眼人都傻了。。。
###官方代码
- def hammingWeight(self, n: int) -> int:
 
-     ret = 0
 
-     while n:
 
-        n &= n - 1
 
-        ret += 1   
 
- return ret
首先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的个数。
这可真的是巧妙极了
最后题目链接奉上,大家也可以做下看看
太强了,泥潭人均算法大佬
对算法一窍不通呜呜呜
太强了,真是大佬
嗯?Python?我也会啊
嗯?Python?我也会啊
思路一样,转成好比较的形式再判断
这题大概两分钟就解决了,我写的C++
class Solution {
public:
int hammingWeight(uint32_t n) {
int num=0;
for(;n>0;){
num+=n%2;
n=n/2;
}
return num;
}
};
class Solution {
public:
int hammingWeight(uint32_t n) {
int num=0;
for(;n>0;){
num+=n%2;
n=n/2;
}
return num;
}
};
用的是什么编程软件
图片不见了!
图片不见了好兄弟
强了,泥潭人均算法大佬
强了,真是大佬
whatfilmae 发表于 2021-3-22 19:29
用的是什么编程软件
力扣在线编辑器