0%

leetCode-231:Power of Two

问题描述

给定一个整数,要求判断这个整数是否是 2 的幂次方。题目链接:点我

样例输入输出

输入:1

输出:true

解释:2 ^ 0 = 1

输入:6

输出:false

问题解法

解法一

使用循环依次除 2,如果过程中有奇数,则说明这不是一个 2 的幂次方。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public boolean isPowerOfTwo(int n) {
if (n < 1) {
return false;
}

if (n == 1) {
return true;
}

while (n != 2) {
if (n % 2 != 0) {
return false;
}

n /= 2;
}

return true;
}
}

解法二

使用 n & (n - 1)n 的最低位 1 置为 0 的方式进行判断,如果 n & (n - 1) == 0,则说明这是一个 2 的幂次方。代码如下

1
2
3
4
5
6
7
8
9
class Solution {
public boolean isPowerOfTwo(int n) {
if (n < 1) {
return false;
}

return (n & (n - 1)) == 0;
}
}