力扣231、2的幂

1、相等法(4ms,47%;5.9ms,5.3%)

 1 bool isPowerOfTwo(int n) {
 2         //反向增加
 3         int m=1;
 4         //保留原值
 5         int num=n;
 6         while(n>1){
 7             n/=2;
 8             m*=2;
 9         }
10         return m==num;
11     }

2、取余法(4ms,47%;5.7MB,90%)

 1 bool isPowerOfTwo(int n) {
 2         if(n<=0)
 3         return false;
 4         while(n>1){
 5             if(n%2==1)
 6             return false;
 7             n/=2;
 8         }
 9         return true;
10     }

3、二进制判断(4ms,47%;5.8MB,70%)

 1 bool isPowerOfTwo(int n) {
 2         if(n<=0)
 3         return false;
 4         if(n==1)
 5         return true;
 6 
 7         //2的幂次方的二进制只有一个1
 8         //如果n的二进制是1000,那n-1的就是0111
 9         //则两者的与运算就是0
10         return (n&(n-1))==0;
11     }

4、二进制判断(0ms,100%;5.7MB,85%)

1 bool isPowerOfTwo(int n) {
2         //-n就是对n的二进制取反再加1
3         //2的幂次方符合判断
4         return (n>=1)&&(n&-n)==n;
5     }

 

上一篇:2的幂


下一篇:231. 2的幂