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 };
越努力,越幸运