leetcode 231. 2的幂
給定一個(gè)整數(shù),編寫一個(gè)函數(shù)來判斷它是否是 2 的冪次方。
示例?1:
輸入: 1
輸出: true
解釋: 20?= 1
示例 2:
輸入: 16
輸出: true
解釋: 24?= 16
示例 3:
輸入: 218
輸出: false
本題思路轉(zhuǎn)載位運(yùn)算的常用技巧:lowbit運(yùn)算,包含lowbit公式、講解、證明
?
什么是lowbit運(yùn)算?
lowbit(n)運(yùn)算是一個(gè)位運(yùn)算的常用技巧,本題就可以直接用lowbit運(yùn)算解決。
它的作用是求出n在表示成二進(jìn)制的時(shí)候,最右邊的1出現(xiàn)的位置對應(yīng)的數(shù)。這么說有點(diǎn)晦澀,看倆例子就懂了,其實(shí)很簡單:
lowbit(4) = lowbit(100) = 100
lowbit(5) = lowbit(1001) = 1
lowbit(6) = lowbit(1010) = 10
lowbit公式
lowbit公式非常簡單:
lowbit(n) = n & -n
公式證明
大家需要有一點(diǎn)計(jì)算機(jī)組成原理的常識,具體的我這里就不詳述了,只簡單提一下。在計(jì)算機(jī)中,數(shù)據(jù)的存儲是以補(bǔ)碼的形式,對于補(bǔ)碼來說:
n >= 0: n的補(bǔ)碼就是它本身
n < 0: n的補(bǔ)碼為~n + 1,其中~n為n的反碼
我們可以通過一個(gè)通例來證明,假設(shè)n=101...1000,中間的數(shù)字省略,直到展示出最右邊的一個(gè)1。
lowbit(n) = n & -n = n & (~n + 1)
n = ? ? ?101...1000
~n = ? ? 010...0111
~n + 1 = 010...1000
因此lowbit(n) = n & (~n + 1) = 1000
本題的解答
知道了lowbit后,解決本題的思路就非常簡單了,一行代碼就可以解決。因?yàn)槲覀兛梢园l(fā)現(xiàn),2的整數(shù)冪都只包含一個(gè)1。換句話說n是2的整數(shù)冪,則lowbit(n) == n。
總結(jié)
以上是生活随笔為你收集整理的leetcode 231. 2的幂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并查集实现
- 下一篇: leetcode41 缺失的第一个正数