题目要求
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
思路一
n小于1,肯定不会是2的幂;当n大于1时,如果出现了n%2 != 0 这种情况,说明n也不是2的幂,所以可以对n做循环取余操作,能坚持下来,它就是2的幂
→_→ talk is cheap, show me the code
class Solution:
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n < 1:
return False
while n > 1:
if n % 2 != 0:
return False
n = n // 2
return True
思路二
1的二进制0001, 2的二进制0010, 4的二进制0100, 8的二进制1000,发现了什么,对,2的幂的二进制表示有且只有一个 1,当它们减少1时,会怎样?原来1的位置变为0,原来1后面的0都变成1,有搞头没?
→_→ talk is cheap, show me the code
class Solution:
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n < 1:
return False
return n & n-1 == 0
网友评论