20.12.13 231.2的幂

题目

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

示例 1:
输入: 1
输出: true
解释: 20 = 1

示例 2:
输入: 16
输出: true
解释: 24 = 16

示例 3:
输入: 218
输出: false

思路

  1. 第一种解法,位运算。当n为2的幂时,转换为二进制只有最高位为1,也就是只有一个1
  2. 第二种解法,位运算,有第一种解法那就肯定由第二种解法,这道题类似二进制中1的位数。n&=(n-1)可以消除n最右边的1,如果n为2的幂,只有一个1
  3. 第三种解法,模拟,不断除以2,直到商为1或者不能整除2

代码

class Solution {
public:
    //位运算
    bool isPowerOfTwo(int n) {
        int count = 0;
        while(n){
            if(n & 1) ++count;
            if(count > 1) return false;
            n >>= 1;
        }
        if(count == 0) return false;
        return true;
    }
};
class Solution {
public:
    bool isPowerOfTwo(int n) {
        while(n > 1 && (n & 1) == 0) n /= 2;
        return n == 1;
    }
};
class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n <= 0) return false;
        n &= (n-1);
        return n == 0;
    }
};
posted @ 2020-12-13 08:16  肥斯大只仔  阅读(50)  评论(0编辑  收藏  举报