描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 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));}}
