LeetCode刷题笔记342:4的幂(Python实现)
作者:互联网
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16 输出: true
示例 2:
输入: 5 输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
Solution1:使用递归
这道题和263丑数有相似的地方,递归isPowerOfFour这个方法,直到将num用4除到商为1,则为4的幂,否则不是
代码:
class Solution:
def isPowerOfFour(self,num):
'''
:param num:int
:return: bool
'''
if num == 0:return False
if num == 1:return True
if num % 4 == 0:
return self.isPowerOfFour(num/4)
return False
Solution2:使用循环
初始化一个变量x=1,然后当x<num时,一直累乘4。然后判断最终的x是否等于num
代码:
class Solution:
def isPowerOfFour(self,num):
if num == 1:return True
x =1
while x < num:
x *= 4
if x == num:return True
return False
Solution3:不使用循环或者递归
用log函数求出以4为底num的对数,设为x,然后判断x是否是整数。
这种方法我在本地IDE上没错误,但是在leetcode提交过程中出错
代码:
import math
class Solution:
def isPowerOfFour(self,num):
'''
:param num: int
:return: bool
'''
x = math.log(num,4)
x_str = str(x).split(".")
right = int(x_str[1])
if right == 0:return True
else:return False
Solution4:二进制(转自题解)
若一个数为4的幂,则1出现在奇数位,那么满足
- 与10101010(偶数为1,奇数为0)的32位的二进制整数相与为0
- 且1的个数为1,则说明是4的幂次代码
代码(Java):
class Solution {
public:
bool isPowerOfFour(int num) {
bitset<32> a=num;
return !(num&2863311530)&&a.count()==1;
}
};
标签:return,Python,int,num,isPowerOfFour,342,False,True,LeetCode 来源: https://blog.csdn.net/FiveStarsGeneral/article/details/90291641