【leetcode】342. Power of Four
2016-06-15 11:25
281 查看
一、题目描述
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
题目解读:判断一个数是否是4的幂
思路:将数写成二进制形式,发现4的幂数的二进制都只有一个1,且1的位置是位于奇数位上。因此将整数化为二进制,在化的过程中,记录1出现的次数和位置。一旦1的次数不等于1,或者1出现的位置不在奇数位置上,就返回false
c++代码(8ms,11.11%)
其他思路:(1)二进制只有一个1,可以用num & (num - 1) 来判断
(2)4的幂数减去1都是3的倍数(用来区别2的幂),用(num - 1)% 3 == 0来判断
(3)非负数,用num > 0来判断
代码(4ms,82.33%)
想出这种方法的人实在是太厉害了,不仅代码简短,而且运行速度也超快。。厉害厉害!!
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
题目解读:判断一个数是否是4的幂
思路:将数写成二进制形式,发现4的幂数的二进制都只有一个1,且1的位置是位于奇数位上。因此将整数化为二进制,在化的过程中,记录1出现的次数和位置。一旦1的次数不等于1,或者1出现的位置不在奇数位置上,就返回false
c++代码(8ms,11.11%)
class Solution { public: bool isPowerOfFour(int num) { if(num == 0) return false; int count = 0; //记录1出现的次数 int location = 0; //记录1出现的位置 while(num){ if(num%2 == 1){ count ++; location ++; if(location%2 != 1) return false; }else{ location ++; } if(count >1) return false; num /= 2; } if(count == 1) return true; else return false; } };
其他思路:(1)二进制只有一个1,可以用num & (num - 1) 来判断
(2)4的幂数减去1都是3的倍数(用来区别2的幂),用(num - 1)% 3 == 0来判断
(3)非负数,用num > 0来判断
代码(4ms,82.33%)
class Solution { public: bool isPowerOfFour(int num) { return num > 0 && (num & (num - 1)) == 0 && (num - 1) % 3 == 0; } };
想出这种方法的人实在是太厉害了,不仅代码简短,而且运行速度也超快。。厉害厉害!!
相关文章推荐
- 部署自己的Gitlab
- Android onActivityResult获取返回值的用法
- 推荐10 款最好用的 Python IDE
- 简单实现的Servlet文件上传,并显示
- 建造者模式
- 如何将Pcm格式的音频文件转换成Wave格式的文件
- red5编译及部署
- 操作数的寻址方式(非常重要)
- Python自动更新脚本
- 结合django动态生成salt的pillar数据
- C语言的宏定义
- linux 发送邮件报 bad syntax 错误
- ViewPager的预加载设置
- 223. Rectangle Area [easy] (Python)
- 使用Visual Studio 中自带的SQL_SERVER数据库
- Android Studio如何删除module
- H5 新增的input元素的类型
- Promise系列04:Promise用法解析
- Android 云笔记APP的实现
- STL源码剖析——priority_queue