Leetcode 231题Power of Two
题目
Given an integer, write a function to determine if it is a power of two.
即判断一个数是否是2的次方数 —— [ Power of Two ]
思路
如果一个数是2的次方数,那么n用二进制表示的数只有一位上是1,其他位上都是0,例如100000,0010,0001等,那么n-1就表达为例如,011111,0001,0000。那么可以发现n和n-1按位于的结果一定为零。
如果n不是2的次方数,那么用二进制表示的数不只有一个位上是1,例如0101,那么n-1的结果为0100,n和n-1的按位于结果一定不是零。
解法
- C语言
bool isPowerOfTwo(int n) {
return n>0 && ((n & (n-1)) == 0);
}
- C++
class Solution {
public:
bool isPowerOfTwo(int n) {
return n>0 && ((n & (n-1)) == 0);
}
};
- Javascript
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
return n>0 && ((n & (n-1)) == 0);
};