67. 二进制求和
题目:给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。
代码:
class Solution {
public String addBinary(String a, String b) {
int i = a.length()-1;
int j = b.length()-1;
int c = 0; //进位
String res = "";
int sum = 0;
while(i>=0||j>=0){
if(j<0){ //当a长度比b长且b已经走到头时,相当于用b(j)为0
sum = (int)(a.charAt(i)-'0')+c;
}
if(i<0){ /当b长度比a长且a已经走到头时,相当于用a(i)为0
sum = (int)(b.charAt(j)-'0')+c;
}
if(i>=0&&j>=0){
sum = (int)(a.charAt(i)-'0')+(int)(b.charAt(j)-'0')+c;
}
c = sum/2;
res = new Integer(sum%2).toString()+res;
i--;
j--;
}
return c==1?"1"+res:res; //若最后进位为1,需要加到开头
}
}
法二
代码:
class Solution {
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}
}
注意: Integer.parseInt(a, 2) 将字符串转换为整数的二进制形式, Integer.toBinaryString(I)将整数I转换为二进制的字符串形式
如果字符串超过 33 位,不能转化为 Integer
如果字符串超过 65 位,不能转化为 Long
如果字符串超过 500000001 位,不能转化为 BigInteger

浙公网安备 33010602011771号