Leetcode Tencent 50 Task9 231. Power of Two

描述

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例 1:

1
2
3
输入: 1
输出: true
解释: 20 = 1

示例 2:

1
2
3
输入: 16
输出: true
解释: 24 = 16

示例 3:

1
2
输入: 218
输出: false

来源:力扣(LeetCode)
链接:231. Power of Two

解题思路

本题依然是考察位运算,掌握了小技巧非常简单,首先一个整数如果是2的幂次方需要满足以下两个条件:

  • 该整数需要大于0;
  • 该整数对应的二进制位串有且仅有一个1,且在最高位。

那么本题的思路就出来,写一个统计整数二进制位串1的个数的辅助函数,如果满足整数>0且二进制位串中1的个数为1则返回true,否则返回false

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int count(int num) {
int count = 0;
while(num != 0){
if(num & 1)
count++;
num >>= 1;
}
return count;
}
/*
bool isPowerOfTwo(int n)
{
if (n > 0 && count(n) == 1)
return true;
else
return false;
}
*/

bool isPowerOfTwo(int n)
{
return (n > 0 && count(n) == 1);

}