文巾解题 342. 4的幂
生活随笔
收集整理的這篇文章主要介紹了
文巾解题 342. 4的幂
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 題目描述
2 解題思路
2.1 方法1 判斷log函數的結果是不是整數
class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falsetmp=math.log(n,4)return(tmp==int(tmp))2.2 方法2 不斷除4
只要能被4整除,就不斷除4,直到不能除為止,判斷是否為1
class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falsewhile(n%4==0):n=n//4return(n==1)2.3? 位運算
如果 n?是 4 的冪,那么 n 一定也是 2 的冪。
因此我們可以首先判斷 n 是否是 2 的冪,在此基礎上再判斷 n 是否是 4 的冪。
判斷 n 是否是 2 的冪可以參考文巾解題 231. 2的冪_劉文巾的博客-CSDN博客
如果 n?是 4 的冪,那么 n 的二進制表示中有且僅有一個 1,并且這個 1 出現在從低位開始的第偶數個二進制位上(這個 1?后面必須有偶數個 0)。這里我們規定最低位為第 0 位,例如 n=16 時,n 的二進制表示為(10000)。唯一的 1?出現在第 4 個二進制位上,因此 n 是 4?的冪。
由于題目保證了 n?是一個 32 位的有符號整數,因此我們可以構造一個整數 mask,它的所有偶數二進制位都是 1,所有奇數二進制位都是 0。這樣一來,我們將 n 和mask 進行按位與運算,如果結果為 n,說明 n?二進制表示中的 1出現在偶數的位置,此時n是4的冪;否則說明其出現在奇數的位置。
根據上面的思路,mask 的二進制表示為0b1010101010101010101010101010101
?
class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falseif(n&(n-1)!=0):return False#如果都不是2的冪,那么更不是4的冪mask=0b1010101010101010101010101010101if(n& mask==n):return Trueelse:return False2.4? mod 3
如果?n?是?4?的冪,那么它可以表示成?的形式,我們可以發現它除以?3?的余數一定為?1,即:
如果n是2的冪,但不是4的冪,那么它可以表示成?的形式,此時它除以?3?的余數一定為?2。
class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falseif(n&(n-1)!=0):return False#如果都不是2的冪,那么更不是4的冪if(n%3==1):return Truereturn False?
總結
以上是生活随笔為你收集整理的文巾解题 342. 4的幂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文巾解题 231. 2的幂
- 下一篇: 文巾解题 9 回文数