第一种解法
int num=0;
int v=255;
while(v!=0)
{
num=num+(v&ox01);
v>>=1;
复杂度为O(logV)
}
//位操作
第二种解法
while(v!=0)
{
v=v&(v-1);
num++;
//复杂度降低到O(M)
}
第三种空间换时间
把你所要的数所有情况1的个数全部列出来,该数的下标就是1的个数,典型的空间置换时间,如果频繁使用时,这是一个不错的方法
正整数 a和b二进制有多少位是不同的
static int count(int v)
{
int num=0;
while(v!=0)
{
v=v&(v-1);
num++;
}
return num;
}
public static void main(String[] args) {
int v=2;
int s=1;
int c=v&s;//得到的结果C中的1的位表明了A和B中相同的位都是1的位;
int d=v|s;// 得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A 与 B 都是1的位数,
int e=c^d;//E 中为1的位表明了A 和 B不同的位。
System.out.println(count(e));
}
总结
当某个函数被大量使用时,看看是否该函数有什么规律
通过增加其空间复杂度来获得更快的执行效率