231. 2的幂

题目

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。

示例1:

1
2
3
输入: 1
输出: true
解释: 20 = 1

示例2:

1
2
3
输入: 16
输出: true
解释: 24 = 16

示例3:

1
2
输入: 218
输出: false

示例4:

1
2
输入:n = 4
输出:true

示例5:

1
2
输入:n = 5
输出:false

提示:

  • -2^31 <= n <= 2^31 - 1

解法

解法一:

2的幂次数值转换为二进制之后,只有一个1,统计每个数字二进制的1的个数就行。

Java

1
2
3
4
5
6
7
8
9
10
class Solution {
public boolean isPowerOfTwo(int n) {
if (n < 1) {
return false;
}
String s = Integer.toBinaryString(n);
long count = s.chars().filter(c -> '1' == c).count();
return 1 == count;
}
}

解法二:

统计数值里面1的个数,2的幂的话,1肯定在最高位,并且只有一个。

Java

1
2
3
4
5
6
7
8
public boolean isPowerOfTwo(int n) {
int count = 0;
while (n > 0) {
n = n & (n - 1);
count++;
}
return count == 1;
}
0%