标签:return Python int num isPowerOfFour 342 False True LeetCode
给定一个整数 (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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。