java
class Solution {
public int reverseBits(int n) {
int rev = 0;
for(int i = 0;i< 32 && n!= 0;i++){
rev |= (n&1)<< (31-i);
n >>>= 1;
}
return rev;
}
}
n & 1相当于取最低位 ,<< 往左移动 (31-i)的位置,对称高位移到对称低位
n >>>= 1 向右移动1位 ,(相当于后面可以取后面的低位)
官方的题解里面是分治的方法,采用掩码的方式,采用2,4,8位等等来进行换位,用的是分治法来反转二进制位。比之前的循环方法更快
java
class Solution {
public String addBinary(String a, String b) {
StringBuilder result = new StringBuilder();
int i = a.length() -1;
int j = b.length() - 1;
int carry = 0;
while(i >= 0 || j >= 0 || carry >0){
int digitA = (i >= 0) ? a.charAt(i) - '0' :0;
int digitB = (j >= 0) ? b.charAt(j) -'0' :0;
int sum = digitA + digitB +carry;
result.append(sum %2);
carry = sum/2;
i--;
j--;
}
return result.reverse().toString();
}
}
可以用栈的方法