@XQF
2018-03-07T14:55:17.000000Z
字数 596
阅读 1648
数据结构与算法
我的思路是统计该数二进制中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;}
