Given an integer, write a function to determine if it is a power of two.
Example 1:
Input: 1 Output: true Explanation: 20 = 1Example 2:
Input: 16 Output: true Explanation: 24 = 16Example 3:
Input: 218 Output: false
题意很简单,问一个数字n是否是2的几次幂。思路是用位运算做,如果你对位运算很敏感,你会发现,所有2的某次方的数字,转化成二进制之后,都只有一个1。比如 2->0010, 4->0100, 8->1000......
所以思路是比较n & n-1是否等于0即可。因为如果n是2的某次方,比它小1的数字里面一定是一堆1。
举个例子,16的二进制是10000,15的二进制是01111,两者做AND运算得到0。代码如下,
JavaScript实现
1 var isPowerOfTwo = function(n) { return n > 0 && (n & (n - 1)) === 0; };
Java实现
1 class Solution { 2 public boolean isPowerOfTwo(int n) { 3 return n > 0 && ((n & (n - 1)) == 0); 4 } 5 }