Leetcode 342. Power of Four

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?

 

题目大意:

 

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

 

测试用例如题目描述。

 

进一步思考:你可以不用循环/递归解决问题吗?

 

解题思路:

 

若一个整数是4的幂,则其二进制形式(只有一个1,奇数位上为0)具有如下特点:

 

1. 最高位为1,其余位为0

 

2. 0的个数为偶数

 

条件1可以用num & (num - 1) == 0判断

 

条件2可以用num & 0x55555555 > 0判断,(0x55555555) <==> 1010101010101010101010101010101,如果得到的数还是其本身,则可以肯定其为4的次方数:

1 class Solution {
2 public:
3     bool isPowerOfFour(int num) {
4         if(num<=0) return false;
5         else return ((num&(num-1))==0)&&((num&0x55555555)==num);
6     }
7 };

 

用循环的方法:

 1 class Solution {
 2 public:
 3     bool isPowerOfFour(int num) {
if(num < 0) return false;
4 int NumOfOne = 0; 5 while(num > 0){ 6 if(num & 1) 7 NumOfOne++; 8 if((num >> 1) & 1) 9 return false; 10 num >>= 2; 11 } 12 if(NumOfOne == 1) 13 return true; 14 else 15 return false; 16 } 17 };

 

posted @ 2016-08-02 18:13  琴影  阅读(240)  评论(0编辑  收藏  举报