Given an integer, write a function to determine if it is a power of two.
Example 1:
Input: 1 Output: true Explanation: 20 = 1Example 2:
Input: 16 Output: true Explanation: 24 = 16Example 3:
Input: 218 Output: false
这道题很简单 主要记一下一些有意思的解法
1 我自己写的,很中规中矩,反向检查
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
return n>0 and n == 2**int(math.log(n,2))
1.1关于类似的写法我发现一个
return n>0 and math.log(n,2).is_integer()
但是这个不通过(1107/1108),n = 536870912时,我在ipython里测了一下是 29.000000000000004,浮点溢出了。。
但是换成log2又可以,。,,神奇
return n>0 and math.log2(n).is_integer()
后面的是从discussion里看到的
2 这个也比较容易理解 ,就是二进制判断,2的幂都是1开头,后面一串0(如1,10,100,1000等)
return n > 0 and bin(n).count("1") == 1
3 使用按位与 比如4 的二进制是100,3的二进制是011,4 & 3 = 100 & 011 = 000 = 0
interesting,因为2^n一定是1000...., 2^n -1 一定是01111...,所以相与一定是0
return n > 0 and n&(n-1) == 0