久违的双百,QAQ
Leetcode-342

题目上说了尽量不要使用循环或者递归,于是想到了之前做过的判断一个数是不是2的幂次方,因此,我们看一哈有没有相似性。

4的幂次方一定是2的幂次方,但是反过来却不成立。例如,8是2的3次方,但并不是4的幂次方。

1转成2进制是1;
4转成2进制是100;
6转成2进制是110;
8转成2进制是1000;
16转成2进制是10000;

判断一个数是不是2的幂次方,我们要看这个数转成2进制后是不是所有位数只有1个1。
那4的幂次方的规律就是看这个数转成2进制后是不是所有位数只有1个1,并且这个1只能在奇数位上出现。

code:

class Solution {public:    bool isPowerOfFour(int num) {        if(num == 1) return true;        if(num <= 3) return false;        int count = 0;        int i = 1;        while(num != 0){            if((num&1) != 0 && (i&1) != 0){                count++;            }            if((i&1) == 0 && (num&1) != 0){                return false;            }            num>>=1;            i++;        }        if(count == 1)        return true;        return false;    }};

这样子的解决方法相较于循环等方法肯定是省力不少的。