LeetCode刷题

[LeetCode]231-2的幂

2018-11-02  本文已影响1人  杏仁小核桃

231. 2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例:
输入: 1 -> 输出: true
输入: 218 -> 输出: false

解法1

常规递归的思路, 逐步除2后得出是否是2的幂次.
还可以进行一次奇偶数的判断, 这样减少循环次数.

class Solution:
    def isPowerOfTwo(self, n):
       if n == 1:
            return True
    
        while n > 1:
            n = n/2
        return n==1

解法2

运用与运算, 当 n 是 2 的幂次时, n 与 n-1 的二进制位互补, 因此与预算的结果必然为0.

class Solution:
    def isPowerOfTwo(self, n):
        if n == 0:
            return False
        return n&(n-1) == 0

解法3

直接算出每个2的幂次数然后比较.
当 n 不是 2 的幂次时, 必然循环32次.

class Solution:
    def isPowerOfTwo(self, n):
        for i in range(31):
            if 2**i == n:
                return True
        return False

解法4

采用递归的方式.

class Solution:
    def isPowerOfTwo(self, n):
        if n == 1: return True
        if n%2 == 0 and n >= 2:
            return self.isPowerOfTwo(n/2)
        else:
            return False

相似题:
326. 3的幂
342. 4的幂

上一篇下一篇

猜你喜欢

热点阅读