今天刷到这一题,依稀记得之前见过最优解,可是始终想不起来,所以用了最常用的法子:用Integer里的方法把整数变成二进制,然后用数组分别验证是否为1.
public static int NumberOf1(int n) {
String s=Integer.toBinaryString(n);
char[] c=s.toCharArray();
int counter=0;
for (int i = 0; i < c.length; i++) {
if (c[i]=='1') {
counter++;
}
}
return counter;
}
在提交成功之后,看到了最优解,原来是这样的:
public static int NumberOf1(int n) {
int counter=0;
while (n!=0) {
++counter;
n=n&(n-1);
}
return counter;
}
我还是看不懂。 先把它记下来吧。
我还看到了和我用相同方法的,可是人家在统计那里比较有技巧,是把所有的0都删掉,然后求其length就可以了。