问题描述
给定一个整数,要求判断这个整数是否是 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; } }
|