騰訊精選練習(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%的用戶
在這裏插入圖片描述

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