一行代码解决2的整数次幂
问题概述:
给定一个数number,确定该数是否为2的整数次幂
问题本质:
计算机存储二进制格式、&运算的运用
思路:
- 2^1=> 10
- 2^2=> 100
- 2^3=> 1000
- …
- 2^n=> 100…000
那么
- 2^1-1=> 1
- 2^2-1=> 11
- …
- 2^n-1=> 111…111
package algorithm;
public class Pow {
public static void main(String[] args) {
System.out.println(twopow(18));
System.out.println(twopow2(18));
}
//low 暴力枚举 时间复杂度o(n)
public static boolean twopow(int number){
int temp = 1;
while (temp<=number){
temp = temp * 2;
if(temp == number){
return true;
}
}
return false;
}
//利用计算机存储数字为2进制的特性,所有2的整数次幂的数最高位为1其余位为0
//那么2的整数次幂-1得到的每一位都是1,时间复杂度o(1)
public static boolean twopow2(int number){
//需要注意&操作运算优先级小于==运算,所以需要加括号
return (number & (number - 1)) == 0;
}
}