67. 二进制求和
程序员文章站
2022-04-24 16:19:58
...
#67. 二进制求和
题目描述
解题思路
求和的题目好多啊,不同的是这个是二进制,所以有了一些不一样的做法
1、自己写的
思路是如果两个字符串长度不一样,就进行补0,这样对于进位的处理会方便很多。
public String addBinary(String a, String b) {
int i = a.length() - 1,j = b.length() - 1; StringBuilder
sb = new StringBuilder();
int plus = 0;
while(i >= 0 || j >= 0) {
char a1 = i >= 0?a.charAt(i):'0';
char b1 = j >= 0?b.charAt(j):'0';
int x = a1 + b1 -'0' - '0' +plus;
plus = x/2;
x= x%2;
sb.append(x);
i--;j--;
}
if(plus == 1)
sb.append('1');
sb.reverse();
return sb.toString();
}
提交结果:
2、转换成数字(数据很大的时候会溢出)
public String addBinary(String a, String b) {
return Integer.toBinaryString(Integer.parseInt(a, 2) +Integer.parseInt(b, 2));
}
3、位运算
import java.math.BigInteger;
class Solution {
public String addBinary(String a, String b) {
BigInteger x = new BigInteger(a, 2);
BigInteger y = new BigInteger(b, 2);
BigInteger zero = new BigInteger("0", 2);
BigInteger answer,plus;
while(y.compareTo(zero) != 0) {
answer = x.xor(y);
plus = x.and(y).shiftLeft(1);
x = answer;
y = plus;
}
return x.toString(2);
}
}
提交结果: