1.2的幂
给定一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == ,则认为 n 是 2 的幂次方。
解答:
判断一个整数n是否是 2 的幂次方,则该整数n必须满足两个条件:
①.该整数n大于0。
②.n&n-1等于0。这是由于n为2的幂次方,故其二进制数只有一个1,并且处于最高位;n-1的二进制数只有一个0,其余全为1,并且0处于最高位。因此将n与n-1相与可以把n的最低位的1消除,又由于n的二进制数只包含一个1,故n&n-1等于0;
class Solution {
public boolean isPowerOfTwo(int n) {
return n>0 && ((n&(n-1))==0);
}
}
1.4的幂
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 。
解答:
判断一个整数n是否是 4 的幂次方,则该整数必须满足三个条件:
①.该整数n大于0。
②.由于4=,故,所以 4 的幂次方也是 2 的幂次方,故也满足以上条件②。
③.因为,4 的幂次方被3整除后余数为1,因此可以通过将整数 n 除以 3 的余数是否为 1 来作为 n 是否是 4 的幂次方的条件之一。
class Solution {
public boolean isPowerOfFour(int n) {
return n>0 && ((n&(n-1))==0) && n%3==1;
}
}