傳送門
Description
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其余都是0,并且可以發現規律,從4的零次冪開始列舉,可以發現與上一個冪次相比,隔了一個0,也就是將4的冪次的二進制位寫在一起,呈現出...0101...的形式,因此根據 ?num & (num - 1)可以判定二進制位是否只有一個1,然后再與十六進制的55555555相與即可判斷是否有4的冪次的表現形式,因為十六進制的5的表現形式正好是0101。
leetcode 53、?
class Solution {
public://3msbool isPowerOfFour(int num) {return !(num & (num - 1)) && (num & 0x55555555);}
};