题目
LeetCode - 231. Power of Two
题目链接
https://leetcode.com/problems/power-of-two/
参考博客
https://leetcode.com/problems/power-of-two/discuss/340168/C%2B%2B-0ms-one-line-code
解题思路
本题考查位移运算,解法一的思路好想,但是注意位移运算最大只能移动30位,当移动31位时,即使原始数据是64位,依然在移到32位时,数据会重新移动到0位,变为负数。
解法二恰好利用了2的幂的特性,即数据形式是 000x000,x为1,当减1时,x的低位全为1,做按位与运算即可把此特征检测出来。
解题源码
1. 解法一
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n == INT_MIN) return false;
for(int i = 0; i <= 30; i++){
if (n == (1 << i)) return true;
}
return false;
}
};
2. 解法二
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && ((n & (n - 1)) == 0 ); // example:1000&0111 = 0
}
};