領釦刷題--342:4的冪
阿新 • • 發佈:2018-12-17
題目描述如下:
給定一個整數 (32 位有符號整數),請編寫一個函式來判斷它是否是 4 的冪次方。
示例 1:
輸入: 16 輸出: true示例 2:
輸入: 5 輸出: false
分析如下:這個 可以聯絡我的上篇文章,關於2的冪,這裡是關於4的冪,可以看一下,2的冪,4的冪,8的冪,16的冪
都有什麼規律呢,2--->10,4-->100,8-->1000,16-->10000......觀察一下,4 和16 的奇數位為1,2和8是偶數位為1,所以,我們就可以保留奇數去掉偶數,所以我們需要找一個篩選器,而最好的篩選器就是0101,偶數為0奇數為1(從後向前)所以程式碼如下
class Solution {
public:
bool isPowerOfFour(int num) {
if(num<=0)
return false;
else
return ((num&(num-1))==0&&(num&0x55555555));
}
};
前面的num&(num-1)用來選出2的冪,後面的0x55555555是一個int32 位長度的篩選器,如果不好理解,可以當作一種程式設計技巧,記住,然後推廣出去,培養這種思維,之後再慢慢的形成自己的思想。