佛山企业网站建设公司推荐,腾讯云可以做网站吗,电子商城采购平台官网,vi设计公司 北京342. 4的幂
使用数学方法
如果一个数是4的幂次方#xff0c;那么它一定可以表示为2的幂次方乘以4的幂次方。而2的幂次方在二进制表示中只有一个1#xff0c;所以只需要判断n是否可以被4整除#xff0c;并且n/4是否也是4的幂次方即可。
class Solution:def isPowerOfFour(…342. 4的幂
使用数学方法
如果一个数是4的幂次方那么它一定可以表示为2的幂次方乘以4的幂次方。而2的幂次方在二进制表示中只有一个1所以只需要判断n是否可以被4整除并且n/4是否也是4的幂次方即可。
class Solution:def isPowerOfFour(self, n: int) - bool:if n 0:return Falsewhile n % 4 0:n // 4return n 1
也可以通过位运算来解决这个问题。如果一个数是4的幂次方那么它的二进制表示中一定只有一位是1其余位都是0。而这个1的位置一定是在奇数位上从右往左数最右边的位为第0位。所以我们只需要判断这个数的二进制表示中是否只有一个1即可。
class Solution:def isPowerOfFour(self, n: int) - bool:return n 0 and n (n - 1) 0 and n 0x55555555 n
代码解释
n 0确保n是正数因为负数和0显然不是4的幂次方。n (n - 1) 0通过位运算判断n的二进制表示中是否只有一个1。如果n是2的幂次方那么它的二进制表示中一定只有一个1其余位都是0。而n-1则是将n的最低位的1变为0并将所有更低的位变为1。所以如果n是2的幂次方那么n (n - 1)的结果一定是0。n 0x55555555 n通过位运算判断n的二进制表示中1的位置是否在奇数位上。0x55555555是一个32位的数其中所有奇数位都是1偶数位都是0。如果n的二进制表示中1的位置在奇数位上那么n 0x55555555的结果一定等于n。