Fork me on GitHub

判断int是否为2的幂—— Leetcode(231)

leetcode链接:231. Power of Two

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

出错样例:

1
Input: -16 Expected: false // 就是没有考虑负数。

C++实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0)
return false;
while(n != 2 && n > 2){
if(n%2 != 0)
return false;
else
n /= 2;
}
return true;
}
};

上述一个常规的做法:连续除。

此外,我们考虑到2的幂的二进制只有最高位为1,其余都为0,此时利用这个特点可以写出如下的代码:

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0)
return false;
return (n &(n-1) )== 0;
//或者一句话表示,如下:
//return n>0 && (n &(n-1) )== 0;
}
};

n & (n-1)==0 会被当作:n & ((n-1)==0),故需要加上括号写为:(n &(n-1) )== 0

例如:8的二进制1000,7的二进制0111,取并集为0。

同类题:

  1. 231. Power of Two
  2. 326. Power of Three
  3. 342. Power of Four
------ 本文结束感谢您的阅读 ------
坚持原创技术分享,您的支持将鼓励我继续创作!