2 的幂 leetcode java
题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
输入输出
示例 1:
输入:n = 1
输出:true
解释:20 = 1
示例 2:
输入:n = 16
输出:true
解释:24 = 16
示例 3:
输入:n = 3
输出:false
代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while(n>1){
if(n%2 != 0) System.out.println(false);
n /= 2;
}
if (n <= 0){
System.out.println(false);
}
System.out.println(true);
思路
这是用循环的方式,n如果是2的幂则必能整除2,一旦有余数则输出false,小于等于0则输出false。循环没有难度,但是进阶有点难。
结果
进阶:你能够不使用循环/递归解决此问题吗?
代码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n<=1){
System.out.println(false);
}
if((n&n-1 )== 0){
System.out.println(true);
}
else
System.out.println(false);
思路
进阶不使用循环,就用一个规律:2的幂和其减一相与则会等于0,不是的话不会等于0。
结果
从结果看两种方式差不的时间空间。