leetcode 191
题目背景:
大体意思就是一个int数字转成2进制后有多少个1。
思路一:
直接转成2进制数组,sum(int[])来获取所有的1;
思路二:
我联想到10进制转2进制,所有的1都出现在余数reminder中,所以只要有余数就在result中+1
代码如下:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
while(n != 0){
if((n & 1) == 1){
res++;
}
n = n >>> 1;
}
return res;
}
}
n&1 == 1
判断当前n是否是奇数,是奇数,则res++
。submit的时候一直报错,timing out
后面感觉应该是>>
与>>>
的区别。本题应该采用>>>
,因为如果采用>>
是有符号右移操作,负数会导致n一直非0,进入死循环。
思路三
利用一个mask
来与n
进行&运算,最后通过mask的迭代左移进行计数。
代码如下:
int mask = 1;
int count = 0;
for(int i=0; i < 32; i++){
if((n & mask) != 0) ++count;
mask = mask << 1;
}
return count;
网友评论