Power of Two

Given an integer, write a function to determine if it is a power of two.

题目翻译:
给出一个整数,判断它是否是2的幂。

题目分析:
2的整数次幂对应的二进制数只含有0个或者1个1,所以我们要做的就是判断输入的数的二进制表达形式里是否符合这一条件。
有一种corner case需要注意,当输入的数为负数的时候,一定不是2的幂。

时间复杂度:O(n)
空间复杂度:O(1)

代码如下:

  1. class Solution {
  2. public:
  3. bool isPowerOfTwo(int n) {
  4. if (n < 0) return false;
  5. bool hasOne = false;
  6. while (n > 0) {
  7. if (n & 1) {
  8. if (hasOne) {
  9. return false;
  10. }
  11. else {
  12. hasOne = true;
  13. }
  14. }
  15. n >>= 1;
  16. }
  17. return hasOne;
  18. }
  19. };