Given an integer, write a function to determine if it is a power of two.

Example 1:

Input: 1
Output: true 
Explanation: 20 = 1

Example 2:

Input: 16
Output: true
Explanation: 24 = 16

Example 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 }

 

LeetCode 题目总结