LeetCode #342 Power of Four 4的幂

342 Power of Four 4的幂

Description:
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example :

Example 1:
Input: 16
Output: true

Example 2:
Input: 5
Output: false

Follow up:
Could you do it without using any loop / recursion?

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

示例 :

示例 1:
输入: 16
输出: true

示例 2:
输入: 5
输出: false

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

思路:

  1. 循环判断 n % 4 == 0, 执行 n /= 4直到 n == 1
  2. 递归, 方法同 1
  3. 4的幂的特点: 转换成二进制后, 仅有一位是1, 并且这一位一定在奇数位
    如16 -> 0b10000, 1 -> 0b1
    判断仅有一位是 1可以用 num & (num - 1) == 0
    判断是否在奇数位可以用 num & 0xaaaaaaaa, 其中 a为 0b1010
    时间复杂度O(1), 空间复杂度O(1)

代码:
C++:

class Solution 
{
public:
    bool isPowerOfFour(int num) 
    {
        return num > 0 and ((num & (num - 1)) == 0) && ((num & 0xaaaaaaaa) == 0);
    }
};

Java:

class Solution {
    public boolean isPowerOfFour(int num) {
        return num > 0 && ((num & (num - 1)) == 0) && ((num & 0xaaaaaaaa) == 0);
    }
}

Python:

class Solution:
    def isPowerOfFour(self, num: int) -> bool:
        return num > 0 and not num & (num - 1) and not num & 0xaaaaaaaa
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,707评论 0 2
  • 326 Power of Three 3的幂 Description:Given an integer, writ...
    air_melt阅读 1,033评论 0 0
  • 8月22日-----字符串相关 2-3 个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消...
    future_d180阅读 4,538评论 0 1
  • LeetCode题目 题目: Given an integer (signed 32 bits), write a...
    _Xie_阅读 1,222评论 0 1
  • 今天是什么日子 起床:6:15 就寝:9:30 天气:中雨 心情:平静 纪念日:无 任务清单 昨日完成的任务,最重...
    1_3fc8阅读 1,241评论 0 0