📅  最后修改于: 2023-12-03 15:00:02.999000             🧑  作者: Mango
在C++中,2的幂指的是2的整数次幂,如2、4、8、16等。在很多算法和数据结构中,2的幂经常被用到。
我们可以利用位运算来判断一个数是否是2的幂。对于一个2的幂,它的二进制表示中只有一位是1,其余位都是0。那么,这个数减去1后二进制表示中则所有位都为1,继续和原数进行按位与运算,结果应该为0。
bool isPowerOfTwo(int n) {
if (n <= 0) return false; // 特判
return (n & (n - 1)) == 0;
}
时间复杂度为O(1),空间复杂度为O(1)。
我们可以利用数学方法来判断一个数是否是2的幂。如果一个数是2的幂,那么它的二进制表示一定是类似于1000、10000、100000这样的形式。那么,我们可以将这个数每次除以2,直到余数不为0或者得到1,如果最终得到的结果是1,那么这个数就是2的幂。
bool isPowerOfTwo(int n) {
if (n <= 0) return false; // 特判
while (n % 2 == 0) { // 如果n是偶数,不断除以2
n /= 2;
}
return n == 1; // 如果最终得到的结果是1,那么这个数就是2的幂
}
时间复杂度为O(logn),空间复杂度为O(1)。
一些出现2的幂次方的算法和数据结构:
2的幂在很多算法和数据结构中被广泛应用。在实现时可以利用位运算或数学方法来判断一个数是否是2的幂。对于不同的场景选择不同的实现方法可以使代码更加简洁高效。