腾讯精选练习(43/50) :2的幂(LeedCode 231)

题目

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

示例 1:

输入: 1
输出: true
解释: 2^0 = 1

示例 2:

输入: 16
输出: true
解释: 2^4 = 16

示例 3:

输入: 218
输出: false

代码实现

方法一:乘法解法

class Solution 
{
public:
    bool isPowerOfTwo(int n) 
    {
        if(n == 1)
            return true;
        if(n > INT_MAX / 2)
        {
            if(n % 2 == 1)
                return false;
            else
                n /= 2;
        }
        int a = 2;
        while(a <= n)
            {
                if(a == n)
                    return true;
                a *= 2;
            }
        return false;
    }
};

方法二:除法解法

class Solution 
{
public:
    bool isPowerOfTwo(int n) 
    {
        if(n <= 0)
            return false;
        while(n - 1)
            if(n % 2 == 0)
                n /= 2;
            else
                return false;
        return true;
    }
};

方法三:位运算解法

class Solution 
{
public:
    bool isPowerOfTwo(int n) 
    {
        if(n <= 0) 
            return false;
        return (n & (n - 1)) == 0;
    }
};

实验结果

方法一:乘法解法
执行结果:通过
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :8.1 MB, 在所有 C++ 提交中击败了17.45%的用户
在这里插入图片描述
方法二:除法解法
执行结果:通过
执行用时 :4 ms, 在所有 C++ 提交中击败了77.43%的用户
内存消耗 :7.9 MB, 在所有 C++ 提交中击败了71.35%的用户
在这里插入图片描述
方法三:位运算解法
执行结果:通过显示详情
执行用时 :4 ms, 在所有 C++ 提交中击败了77.43%的用户
内存消耗 :8.2 MB, 在所有 C++ 提交中击败了5.71%的用户
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章