[关闭]
@XQF 2018-03-07T22:55:17.000000Z 字数 596 阅读 1514

如何判断一个数是不是2的n次方?

数据结构与算法


1.首发

我的思路是统计该数二进制中1的个数,个数要是超过2的统统枪毙

  1. public boolean isPower(int num) {
  2. if(num==0){
  3. return false;
  4. }
  5. int a = 1;
  6. int counter = 0;
  7. for (int i = 0; i < 31; i++) {
  8. if ((a & num) != 0) {
  9. counter++;
  10. if (counter > 1) {
  11. return false;
  12. }
  13. }
  14. a <<= 1;
  15. System.out.println("a: " + a);
  16. }
  17. return true;
  18. }

2.最简单的

用1去移位和目标值比较。,。,。最差时间复杂度是执行31次移位操作

  1. public boolean isPower(int num) {
  2. if(num==0){
  3. return false;
  4. }
  5. int a = 1;
  6. for (int i = 0; i < 31; i++) {
  7. if (a == num) {
  8. return true;
  9. }
  10. a <<= 1;
  11. }
  12. return false;
  13. }

3.终极解决办法

倘若一个数是2的n次方,那么这个数减1的二进制就应该全为1.
因此这个数与上减一的结果为0就可以证明是2的n次方。

真是有趣

  1. public boolean isPower(int num) {
  2. if (num < 1) {
  3. return false;
  4. }
  5. int m = num & (num - 1);
  6. return m == 0;
  7. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注