題目連結:
題目意譯:
給定一整數 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)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。