Given an integer, write a function to determine if it is a power of two.
分析:题目意思是给定一个整数n,判断其是否为2的幂数。
拿到题目之后很容易想到的方法是,我一直用n除以2,直到不能除尽,最后判断该值是否为1,为1返回true,不为1则返回false。
方法二:用如果一个数为2的幂数,则n&(n-1)的结果应该是0.
方法三:把n转换成字符串,判断这个字符串是否为以1开头,后面全是0的字符串。
当然,所有的以上三种方法,均需提取考虑n<=0的情况。
提交之后发现方法二运行时间最快,方法三运行时间最慢。
public boolean isPowerOfTwo(int n) {
if(n<=0){
return false;
}else{
while(n>1&&n%2==0){
n=n/2;
}
return n==1;
}
}
public boolean isPowerOfTwo2(int n) {
if(n<=0){
return false;
}else{
return (n&(n-1))== 0;
}
}
public boolean isPowerOfTwo3(int n) {//运行时间很慢
if(n<=0){
return false;
}
if(n == 1 ){
return true;
}
String s = Integer.toBinaryString(n);
return s.matches("1"+"[0]+");
}