描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
Tags
思路
- carry携带进位
- / 除法运算,向下取整
- % 模运算,当左边小于右边时,取左边。当左边数大于右边时,正常就是正常的算数。
- ‘0’只计算该位置是1的值。
- 由于从右至左计算,因此计算结果中,各位在最左边,需要翻转字符串
代码
方法一
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1, j = b.length() - 1, carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
if (j >= 0)
sum += b.charAt(j--) - '0';
if (i >= 0)
sum += a.charAt(i--) - '0';
sb.append(sum % 2);
carry = sum / 2;
}
if (carry != 0) {
sb.append(carry);
}
return sb.reverse().toString();
}
}
方法二
tricky
class Solution {
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}
}