切換
舊版
前往
大廳
主題

LeetCode - 231. Power of Two 解題心得

Not In My Back Yard | 2020-09-18 22:58:52 | 巴幣 2 | 人氣 204

題目連結:


題目意譯:
給定一整數 n,撰寫一個函式判斷該數是否為 2 的冪次。



範例測資:
範例 1:
輸入: 1
輸出: true
解釋: 2 ^ 0 = 1

範例 2:
輸入: 16
輸出: true
解釋: 2 ^ 4 = 16

範例 3:
輸入: 218
輸出: false


解題思維:
首先,先判斷 n 是否大於 0。如果 n ≦ 0 ,則 n 一定不是 2 的冪次。

可以看到一個 2 的冪次之數,若且唯若其二進位表示法中有唯一位元是「1」。所以 n 如果是一個 2 的冪次,則 n - 1 的二進位制表示法之「1」會與 n 的「1」錯開。因此 n & (n - 1) 會等於 0 (& 代表邏輯運算「and」)。

因此,整體的判斷式可以寫為如果 n > 0 且 (n & (n - 1)) == 0 ,則回傳真(true);反之,回傳假(false)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作