leetcode-342. 4的冪刷題筆記(c++)

寫在前面

  • 移位運算
  • 刷題筆記作爲後續參考

題目詳情

給定一個整數 (32 位有符號整數),請編寫一個函數來判斷它是否是 4 的冪次方。

示例 1:
	輸入: 16
	輸出: true

示例 2:
	輸入: 5
	輸出: false

進階:
你能不使用循環或者遞歸來完成本題嗎?

ac代碼

  • F1:移位+取餘
class Solution {
public:
    bool isPowerOfFour(int num) {
        return (num>0) && ((num & (num-1)) == 0) && (num%3 == 1);
    }
};
  • F2:移位
    • 1.4的冪的二進制位1都在奇數位上。
    • 2.判斷是否num大於0,再判斷是否是2的冪,因爲是4的冪就一定是2的冪,在與0xAAAAAAAA想與,其二進制上所有偶數位均爲1。
    • 3.以上條件均成立表示該數是4的冪。
      • 注意運算符號優先級!!!
class Solution {
public:
    bool isPowerOfFour(int num) {
        return (num > 0) && ((num & (num - 1)) == 0) && ((num & 0xAAAAAAAA) == 0);
    }
};
  • F3:數乘循環
class Solution {
public:
bool isPowerOfFour(int n)
{
    for(long res=1; res<=n; res*=4)
    {
        if(res==n)
            return true;
    }
    return false;
}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章