题目
Given an integer, write a function to determine if it is a power of two.
Example 1:
Input: 1
Output: true
Explanation: 20 = 1
Example 2:
Input: 16
Output: true
Explanation: 24 = 16
Example 3:
Input: 218
Output: false
代码
代码一
package power_of_two;
public class Solution {
public boolean isPowerOfTwo(int n) {
//排除n小于0的情况
if(n<0)return false;
//2 ---2^0----1
//2 ---2^1----10
//2 ---2^2----100
//2 ---2^3----1000
//2 ---2^4----10000
//2的幂次方的整数,转化为二进制时,前面为1,后面都是0
String b = Integer.toBinaryString(n);
for (int i = 0; i < b.length(); i++) {
int c = Integer.valueOf(b.substring(i, i+1));
if(i==0) {
if(c==1) {
continue;
}else {
return false;
}
}
if(c==0) {
continue;
}else {
return false;
}
}
return true;
}
public static void main(String[] args) {
// int b = 16;
// int b = 3;
// int b = -2147483648;
int b = 0;
Solution s = new Solution();
System.out.println(s.isPowerOfTwo(b));
}
}
代码二,(官方)
不断除2,最后得到1的,这个整数就是2的幂次方数。
4/2=2...0
2/2=1...0
再看看6
6/2=3...0
3%2=1,1不等于0,跳出while循环
3不等于1,返回false
class Solution {
public boolean isPowerOfTwo(int n) {
if (n == 0) return false;
while (n % 2 == 0) n /= 2;
return n == 1;
}
}
代码三,位运算,获取二进制中最右边的 1(官方)
class Solution {
public boolean isPowerOfTwo(int n) {
if (n == 0) return false;
long x = (long) n;
return (x & (-x)) == x;
}
}
代码四,位运算,去除二进制中最右边的 1(官方)
不建议看这个,太复杂了。
class Solution(object):
def isPowerOfTwo(self, n):
if n == 0:
return False
return n & (n - 1) == 0