久违的双百,QAQ
Leetcode-342code
题目上说了尽可能不要使用循环或者递归,因而想到了以前作过的判断一个数是否是2的幂次方,所以,咱们看一哈有没有类似性。递归
4的幂次方必定是2的幂次方,可是反过来却不成立。例如,8是2的3次方,但并非4的幂次方。leetcode
1转成2进制是1;
4转成2进制是100;
6转成2进制是110;
8转成2进制是1000;
16转成2进制是10000;get
判断一个数是否是2的幂次方,咱们要看这个数转成2进制后是否是全部位数只有1个1。
那4的幂次方的规律就是看这个数转成2进制后是否是全部位数只有1个1,而且这个1只能在奇数位上出现。io
code:class
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; } };
这样子的解决方法相较于循环等方法确定是省力很多的。循环