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

示例 1:

输入: 16
输出: true

示例 2:

输入: 5
输出: false

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

这题本质上还是一个数学问题,考察的是二进制的一些操作。因为4的幂一定是2的幂,且二进制后,其1的位置一定出现在奇数位。

如 4: 0100   16:10000

所以思路很清晰了。首先判断是不是2的幂,然后再判断其1的位置是不是在奇数位。判断的方法是将这个数与 0x55555555 相与 。这样奇数位上一旦有1 ,结果必为非零。

当然这种比较取巧的方法我是看了评论区才知道的。一般的做法是用移位来逐个判断,类似。

代码如下:

class Solution {
public boolean isPowerOfFour(int num) {
if (num<0 || (num & (num-1))!=0)
return false;
int i=(num & 0x55555555);
System.out.println(i);
return i>1;
}
}

最新文章

  1. 一道Twitter面试题
  2. IIS 7中 ISAPI 错误解决
  3. 【Android 】Service 全面总结
  4. DevExpress licenses.licx 的解决方法 z
  5. 从ramdisk根文件系统启动Linux成功
  6. Apache Commons DbUtils Problem
  7. HDU_1238——最大子串搜索
  8. rapidjson 使用教程
  9. Java并发编程:volatile 关键字
  10. &lt;Mastering KVM Virtualization&gt;:第二章 KVM内部原理
  11. Heritrix工具实现网络爬虫
  12. 【转】java中equal与==的区别 其中有个缓冲区,需要注意
  13. spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)
  14. Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore
  15. JDK8中HashMap
  16. lua 调用参数报错(a userdata value)
  17. C#中new的三种用法
  18. fabric知识梳理图解
  19. rock-paper-scissors
  20. XamarinEssentials教程设置首选项Preferences的值

热门文章

  1. vue内使用echarts
  2. 研究了3天,终于将 Shader 移植到 Cocos Creator 2.2.0 上了!
  3. Java代码优化建议
  4. Redis学习四(运维指南).
  5. .NET Core 3.0 本地工具
  6. Nmap渗透测试使用方法
  7. spring boot mybatis多多数据源解决方法
  8. day2------运算符和编码
  9. Centos7 基础命令与软件的安装
  10. Splash的使用