Dec 21, 2021
   
   
    
    
    
    
     Edit me
    
   #. Problem
1. My approach
brute force
Even if I divided it by 2, the whole process will only take 32 times even on the worst case.
bool isPowerOfTwo(int n) {
    if(n <= 0) return false;
    while(n%2 == 0){
        n /= 2;
    }
    if(n == 1) return true;
    else return false;
}
2. Solution
cleaver
Very easy and efficient.
Based on
- Binary code of power of 2 would only have one 1. ex) 000100
- power of 2 can’t be smaller than 0
You can come up with the solution below.
bool isPowerOfTwo(int n) {
   if(n<=0) return false;
   return (n & (n-1))? false:true;
}
0 0 0 1 0 0 0 0 0 
0 0 0 0 1 1 1 1 1 
& 
0 0 0 0 0 0 0 0 0
n & (n - 1) cannot be true when n is power of 2.