【LeetCode 简单题】77-4的幂

声明:

今天是第77道题。给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

题目:给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:

输入: 16
输出: true

示例 2:

输入: 5
输出: false

进阶:
你能不使用循环或者递归来完成本题吗?

解法1。用巧取的方式,但和上一节求3的幂不一样,因为要考虑到是4的幂一定是2的幂,所以要排除掉是2的幂但不是4的幂这些数判断逻辑就需要变化,必要条件见下,代码如下。

执行用时: 40 ms, 在Power of Four的Python提交中击败了19.17% 的用户

  • 大于0
  • 最高位是1(是4的幂,但也满足是2的幂)
  • 0的个数是偶数个,1肯定在奇数位(这里代码中为什么用16进制的数表示?难道是因为相比于2进制,16进制能表示更大的数吗?)
class Solution(object):
    def isPowerOfFour(self, num):
        """
        :type num: int
        :rtype: bool
        """
        return num > 0 and num & (num-1) == 0 and num & 0x55555555 > 0

解法2。迭代

执行用时: 44 ms, 在Power of Four的Python提交中击败了10.83% 的用户

class Solution(object):
    def isPowerOfFour(self, num):
        """
        :type num: int
        :rtype: bool
        """
        while num % 4 == 0 and num >= 4:
            num //= 4
        return n == 1

解法3。递归

执行用时: 32 ms, 在Power of Four的Python提交中击败了80.00% 的用户

class Solution(object):
    def isPowerOfFour(self,num):
        if num < 4:
            if num == 1:
                return True
            else:
                return False

        if num % 4 == 0 and num >= 4:
            return self.isPowerOfFour(num/4)
        else:
            return False
        

结尾

解法1:LeetCode

解法2&解法3:原创

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/83818364
今日推荐