声明:
今天是第61道题。给定一个整数,编写一个函数来判断它是否是 2 的幂次方。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1 输出: true 解释: 20 = 1示例 2:
输入: 16 输出: true 解释: 24 = 16示例 3:
输入: 218 输出: false
解法1。利用观察得出规律,如果n是2的若干次幂,那么n的2进制表示肯定是高位1其他全0,n和n-1的与肯定是全0。
执行用时: 28 ms, 在Power of Two的Python提交中击败了99.84% 的用户
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n == 0:
return False
if n == 1:
return True
res = n&(n-1) # 如果n是2的若干次幂,n的二进制表示最高位为1其他全0,和n-1相与的话一定是全0
if res == 0:
return True
else:
return False
解法2。n除以2,遍历条件是n是2的倍数以及n>1,那么除到最后如果n是2的幂,那么肯定为1。
执行用时: 36 ms, 在Power of Two的Python提交中击败了39.53% 的用户
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
while n%2 ==0 and n>1:
n /= 2
return n=1
解法3。等比增加2的倍数和n相比较,如果恰好找到,返回True,若n更大,则等比增加,若n更小,那么返回False。
扫描二维码关注公众号,回复:
3925656 查看本文章
执行用时: 36 ms, 在Power of Two的Python提交中击败了39.53% 的用户
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
for i in range(32):
if n == pow(2,i):
return True
if n > pow(2,i):
continue
else:
return False
return False
结尾
解法1:https://blog.csdn.net/ymmbjcz/article/details/78645896
解法2&解法3:LeetCode