美文网首页LeetCode刷题
[LeetCode]231-2的幂

[LeetCode]231-2的幂

作者: 杏仁小核桃 | 来源:发表于2018-11-02 16:15 被阅读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的幂

    相关文章

      网友评论

        本文标题:[LeetCode]231-2的幂

        本文链接:https://www.haomeiwen.com/subject/bxjcxqtx.html