1. 问题描述
Given an integer, write a function to determine if it is a power of two.
Tags: Math Bit Manipulation
Similar Problems: (E) Number of 1 Bits (E) Power of Three (E) Power of Four
2. 解题思路
该题判断某个给定的整数是否为2的次方数?
首先,观察下2的次方数的二进制写法的特点:
- 十进制:1 2 4 8 16 ….
- 二进制:1 10 100 1000 10000 ….
可知,若某数是2的次方数,则其对应的二进数的最高位必然是1,且其它位均为0。
- 思路一:若将该数减1,则最高位会降一位,其余为0的位现在都为变为1,再将两数相与,就会得到0,可利用该性质结题。
- 思路二:每次判断最低位是否为1,然后向右移位,最后统计1的个数,即可判断是否是2的次方数。
3. 代码
思路1:
1 class Solution { 2 public: 3 bool isPowerOfTwo(int n){ 4 if (n<=0) 5 { 6 return false; 7 } 8 return (n & (n-1)) == 0; 9 } 10 };
思路2:
1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 int count = 0; 5 while (n > 0) 6 { 7 count += (n & 1); 8 n >>= 1; 9 } 10 return count == 1; 11 } 12 };
4. 反思
- 举一反三:对于关于整数操作的题目,首先考虑位操作。
- 规律总结:一个数 n,如果是 2 的 N 次方,那么有:n & (n - 1) = 0