[LeetCode]231. Power of Two判断是不是2\3\4的幂
/* 用位操作,乘2相当于左移1位,所以2的幂只有最高位是1 所以问题就是判断你是不是只有最高位是1,怎判断呢 这些数-1后形成的数,除了最高位,后边都是1,如果n&n-1就可以判断了 如果是2的幂,&的结果是全0 */ if (n<=0) return false; return ((n&(n-1))==0);
划重点:
一个数*2,出相当于左移一位
2.判断是不是3的幂,没啥用的一道题
public boolean isPowerOfThree(int n) { /* 不能用循环和递归 感觉不看答案是做不出来 3的幂都可以被int中最大的3的倍数整数 */ return n > 0 && (1162261467 % n) == 0; }
3.判断是不是4的幂
重点就是记住:0x55555555,8个5这个16进制的二进制是:奇数位1,偶数位0,用于提取出一个数的奇数位
/* 2的幂中有些不是4的幂,哪些呢?多写几个不难发现 2的幂特征是:最高位是1,后边的是0 而4的幂除了上边的特征,还有最高位必须是从后边数第奇数位 比如8的二进制是1000,从后边数第4位是最高位,不是4的幂,同理还有32 判断最高位是不是偶数位,用0x55555555&上就行,因为这个数的二进制表示 是奇数位为1,偶数位为0 */ public boolean isPowerOfFour(int num) { return num>0&(num&(num-1))==0&(num&0x55555555)!=0; }