【LeetCode-342】 Power of Four(C++)
来源:互联网 发布:阿里云ecs适合hdfs吗 编辑:程序博客网 时间:2024/06/05 19:54
题目要求:要求写一个函数判断一个int型数num是不是4的幂。
解题思路: 可以用循环和不循环两种方式实现。
第一种:循环。任一个数如果是4的幂,则重复除以4的话最后会得到一个1。例:64/4=16,16/4=4,4/4=1。且除的过程中全部都是整除,没有余数。可以用这个思路判断num是不是4的幂。
第二种:不循环。首先一个数如果是4的幂,那这个数一定是2的幂,如:4^2=(2^2)^2=2^4,所以首先判断num是不是2的幂,如果num是2的幂,则化为二进制的话 一定是10…0的形式,即1后面跟一串0。所以num-1一定是01…1的形式,即0后面跟一串1,并且位数相同。所以num&(num-1)=0。如果满足这个条件则num是2的幂。 如果num是2的幂则接下来判断num是不是4的幂,因为4^n=(2^2)^n=2^(2n)。所以如果num是4的幂,则化为二进制一定是1后面跟偶数个0的形式。故判断num&0x55555555,因为0x55555555的奇数位均为1,而num如果是4的幂,1后面跟偶数个0,则num的1也在奇数位,其他位为0,故两者相与一定为1。如果num是2 的幂而不是4的幂,则化为二进制形式为1后面跟奇数个0,这样num为1的那一位一定在偶数位,其他位为0。0x55555555的偶数位全为0,故两者相与一定为0。
实现代码:
//循环class Solution {public: bool isPowerOfFour(int num) { if(num==0) return false; while(num!=1&&num%4==0){ num=num/4; } if(num==1) return true; else return false; }};
//不循环class Solution {public: bool isPowerOfFour(int num) { if(num&(num-1)) return false; else if(num&0x55555555) return true; else return false; }};
0 0
- 【LeetCode-342】 Power of Four(C++)
- (LeetCode 342) Power of Four
- 【LeetCode-342】Power of Four
- Power of Four leetcode 342
- Leetcode Power of Four 342
- LeetCode 342 Power of Four
- leetcode 342 Power of four
- leetcode 342 Power of Four
- LeetCode[342] Power of Four
- LeetCode 342 Power of Four
- LeetCode 342 Power of Four
- Leetcode 342 Power of Four
- leetcode-342-Power of Four
- Leetcode 342 Power of Four
- [LeetCode]Power of Four
- Power of Four-Leetcode
- LeetCode Power of Four
- LeetCode - Power of Four
- 【C++ STL】三十分钟掌握STL
- android中xml tools:属性详解
- DP 1001
- Mysql基础以及CRUD操作
- 简单使用Git和Github来管理自己的代码和读书笔记
- 【LeetCode-342】 Power of Four(C++)
- DevExpress控件使用方法:第一篇 gridControl详解
- iOS之SQLite基本使用
- 《剑指offer》-包含min函数的栈
- 一位算法工程师对自己工作的反思,写得挺实在的
- OC正式协议和非正式协议
- MySQL 数据库学习笔记1
- 解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题
- HBase简介及入门