您的位置:首页 > 其它

leetcode | Power of Two

2015-07-18 19:21 246 查看
Power of Two : https://leetcode.com/problems/power-of-two/

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

判断一个数是否是2的幂?

当无从下手时,可以根据例子找出规律。对于1,2,4,8,16它们的二进制表示分别是:

1: (1)

2: (10)

4: (100)

8: (1000)

16:(10000)

可以发现规律,凡是2的幂,只有最高位是 1,其他低位全为0.

而对于2n−12^n-1的二进制,如3 的二进制为 (011); 7 的二进制位 (0111)

if 2n2^n &(2n−1)(2^n-1) == 0 true, or false

或者判断,检测是否除了一个最高位 1,还有没有别的位是 1

class Solution {
public:
bool isPowerOfTwo(int n) {
if (n <= 0)
return false;
if (n & (n-1))
return false;
return true;
}
};


class Solution {
public:
bool isPowerOfTwo(int n) {
if (n <= 0)
return false;
while (n != 1) {
if (n & 0x01 == 1)
return false;
n = n >> 1;
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: