Power of Two
Given an integer, write a function to determine if it is a power of two.
题目要求:判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数
我们应该首先考虑位操作 Bit Operation。
由于2的幂一定是正数,我们需要加以判断。这里我们使用减一相与法。
public class Solution {
public boolean isPowerOfTwo(int n) {
return ((n & (n-1))==0 && n>0);
}
}
Power of Three
Given an integer, write a function to determine if it is a power of three.
题目与上题要求一样
最简单的解法,不断将原数除以3,一旦无法整除,余数不为0,则说明不是4的幂,如果整除到1,说明是3的幂。
public class Solution {
public boolean isPowerOfThree(int n) {
if(n<=0)return false;
while(n%3==0){
n/=3;
}
return n==1;
}
}
Power of Four
Given an integer, write a function to determine if it is a power of four.
要求与上面一样
最简单的解法,不断将原数除以4,一旦无法整除,余数不为0,则说明不是4的幂,如果整除到1,说明是4的幂。
public class Solution {
public boolean isPowerOfFour(int num) {
if(num<=0)return false;
while(num%4==0){
num/=4;
}
return num==1;
}
}
这里同样可以使用位运算,使用减一相与法可以判断是2的次幂与减一整除3就可以排除不是4的次幂的可能性。
public class Solution {
public boolean isPowerOfFour(int num) {
return ((num&(num-1))==0&&num>0&&(num-1)%3==0);
}
}