文巾解题 342. 4的幂

1 题目描述

2 解题思路

2.1 方法1 判断log函数的结果是不是整数


class Solution:
    def isPowerOfFour(self, n: int) -> bool:
        if(n<=0):
            return False
        tmp=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 False
        while(n%4==0):
            n=n//4
        return(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 False
        if(n&(n-1)!=0):
            return False
        #如果都不是2的幂,那么更不是4的幂
        mask=0b1010101010101010101010101010101
        if(n& mask==n):
            return True
        else:
            return False

2.4  mod 3

如果 n 是 4 的幂,那么它可以表示成 4^x的形式,我们可以发现它除以 3 的余数一定为 1,即:
4^x mod 3 = (3+1)^x mod\3 = (3^x + C_x^1 3^{x-1} 1^1+...+C_x^{x-1}3^1 1^{x-1}+1^x)mod\ 3 =1

如果n是2的幂,但不是4的幂,那么它可以表示成4^x *2 的形式,此时它除以 3 的余数一定为 2。

class Solution:
    def isPowerOfFour(self, n: int) -> bool:
        if(n<=0):
            return False
        if(n&(n-1)!=0):
            return False
        #如果都不是2的幂,那么更不是4的幂
        if(n%3==1):
            return True
        return False

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值