@XQF
2018-03-07T22:55:17.000000Z
字数 596
阅读 1514
数据结构与算法
我的思路是统计该数二进制中1的个数,个数要是超过2的统统枪毙
public boolean isPower(int num) {
if(num==0){
return false;
}
int a = 1;
int counter = 0;
for (int i = 0; i < 31; i++) {
if ((a & num) != 0) {
counter++;
if (counter > 1) {
return false;
}
}
a <<= 1;
System.out.println("a: " + a);
}
return true;
}
用1去移位和目标值比较。,。,。最差时间复杂度是执行31次移位操作
public boolean isPower(int num) {
if(num==0){
return false;
}
int a = 1;
for (int i = 0; i < 31; i++) {
if (a == num) {
return true;
}
a <<= 1;
}
return false;
}
倘若一个数是2的n次方,那么这个数减1的二进制就应该全为1.
因此这个数与上减一的结果为0就可以证明是2的n次方。
真是有趣
public boolean isPower(int num) {
if (num < 1) {
return false;
}
int m = num & (num - 1);
return m == 0;
}