国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

求解 4 的冪次方的裝逼解法

objc94 / 3337人閱讀

題目來源于 LeetCode 上第 342 號問題:4 的冪。題目難度為 Easy,目前通過率為 45.3% 。

題目描述

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

示例 1:

輸入: 16
輸出: true

示例 2:

輸入: 5
輸出: false

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

題目解析

這道題最直接的方法就是不停的去除以 4 ,看最終結(jié)果是否為 1 ,參見代碼如下:

class Solution {
    public boolean isPowerOfFour(int num) {
         while ( (num != 0)  && (num % 4 == 0)) {
            num /= 4;
        }
        return num == 1;
    }
}

不過這段代碼使用了 循環(huán) ,逼格不夠高。

對于一個整數(shù)而言,如果這個數(shù)是 4 的冪次方,那它必定也是 2 的冪次方。

我們先將 2 的冪次方列出來找一下其中哪些數(shù)是 4 的冪次方。

十進制 二進制
2 10
4 100 (1 在第 3 位)
8 1000
16 10000(1 在第 5 位)
32 100000
64 1000000(1 在第 7 位)
128 10000000
256 100000000(1 在第 9 位)
512 1000000000
1024 10000000000(1 在第 11 位)

找一下規(guī)律: 4 的冪次方的數(shù)的二進制表示 1 的位置都是在奇數(shù)位。

之前在小吳的文章中判斷一個是是否是 2 的冪次方數(shù)使用的是位運算 n & ( n - 1 )。同樣的,這里依舊可以使用位運算:將這個數(shù)與特殊的數(shù)做位運算。

這個特殊的數(shù)有如下特點:

足夠大,但不能超過 32 位,即最大為 1111111111111111111111111111111( 31 個 1)

它的二進制表示中奇數(shù)位為 1 ,偶數(shù)位為 0

符合這兩個條件的二進制數(shù)是:

1010101010101010101010101010101

如果用一個 4 的冪次方數(shù)和它做與運算,得到的還是 4 的冪次方數(shù)。

將這個二進制數(shù)轉(zhuǎn)換成 16 進制表示:0x55555555 。有沒有感覺逼格更高點。。。

圖片描述

代碼實現(xiàn)
class Solution {
    public boolean isPowerOfFour(int num) {
        if (num <= 0)
            return false;
        //先判斷是否是 2 的冪
        if ((num & num - 1) != 0)
            return false;
        //如果與運算之后是本身則是 4 的冪
        if ((num & 0x55555555) == num)
            return true;
        return false;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76260.html

相關(guān)文章

  • 額,又是一道裝逼解法的算法題

    摘要:題目難度為,目前通過率為。這個特殊的數(shù)有如下特點足夠大,但不能超過位,即最大為個它的二進制表示中奇數(shù)位為,偶數(shù)位為符合這兩個條件的二進制數(shù)是如果用一個的冪次方數(shù)和它做與運算,得到的還是的冪次方數(shù)。將這個二進制數(shù)轉(zhuǎn)換成進制表示。 題目來源于 LeetCode 上第 342 號問題:4 的冪。題目難度為 Easy,目前通過率為 45.3% 。 題目描述 給定一個整數(shù) (32 位有符號整數(shù))...

    Zack 評論0 收藏0
  • 【算法技巧】位運算裝逼指南

    摘要:位算法的效率有多快我就不說,不信你可以去用億個數(shù)據(jù)模擬一下,今天給大家講一講位運算的一些經(jīng)典例子。不過,最重要的不是看懂了這些例子就好,而是要在以后多去運用位運算這些技巧,當然,采用位運算,也是可以裝逼的,不信,你往下看。位算法的效率有多快我就不說,不信你可以去用 10 億個數(shù)據(jù)模擬一下,今天給大家講一講位運算的一些經(jīng)典例子。不過,最重要的不是看懂了這些例子就好,而是要在以后多去運用位運算這...

    _ang 評論0 收藏0
  • 「leetcode」231.2的冪

    摘要:原題給定一個整數(shù),編寫一個函數(shù)來判斷它是否是的冪次方。按位與的取值規(guī)則如下,等于等于等于等于。我們可以利用這個特性,判斷數(shù)字是否為的次冪。 showImg(https://segmentfault.com/img/remote/1460000020181837?w=1321&h=729); 原題 給定一個整數(shù),編寫一個函數(shù)來判斷它是否是 2 的冪次方。 示例 1: 輸入: 1 輸出:...

    劉東 評論0 收藏0
  • [Leetcode] Power of Two and Power of Four 二之冪四之冪

    摘要:整除法復雜度時間空間思路最簡單的解法,不斷將原數(shù)除以,一旦無法整除,余數(shù)不為,則說明不是的冪,如果整除到,說明是的冪。二進制位計數(shù)法復雜度時間空間思路的冪有一個特性,就是它的二進制表達中只有開頭是,后面全是。 Power of Two Given an integer, write a function to determine if it is a power of two. 整除法...

    荊兆峰 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<