写在前面
- 运算符,活学活用
-
乘法 vs 移位运算
- 真tm的菜,,,,,,
题目详情
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出:
ac代码
-
F1. res<<=1
class Solution
{
public:
bool isPowerOfTwo(int n)
{
for(long res=1; res<=n; res<<=1)
{
if(res==n)
return true;
}
return false;
}
};
-
F2. res*=2
class Solution
{
public:
bool isPowerOfTwo(int n)
{
for(long res=1; res<=n; res*=2)
{
if(res==n)
return true;
}
return false;
}
};
-
F3. 移位运算-技巧型
- 2的幂一定是大于0。对于数n,如果n是2的幂,其二进制数应该只有1个1, 则n&n-1 一定等于0。
class Solution
{
public:
bool isPowerOfTwo(int n)
{
return n>0 && !(n&n-1);
}
};
- 参考文章
- Leetcode 231. 2的幂 解题思路及C++实现
- 231. 2的幂/C++