日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 231. 2的幂

發(fā)布時(shí)間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 231. 2的幂 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

給定一個(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。

class Solution {public boolean isPowerOfTwo(int n) {return n > 0 && (n & -n) == n;} }

總結(jié)

以上是生活随笔為你收集整理的leetcode 231. 2的幂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。