描述

给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。

Tags

math | string

思路

image.png

  • carry携带进位
  • / 除法运算,向下取整
  • % 模运算,当左边小于右边时,取左边。当左边数大于右边时,正常就是正常的算数。
    • ‘0’只计算该位置是1的值。
  • 由于从右至左计算,因此计算结果中,各位在最左边,需要翻转字符串

    代码

方法一

  1. class Solution {
  2. public String addBinary(String a, String b) {
  3. StringBuilder sb = new StringBuilder();
  4. int i = a.length() - 1, j = b.length() - 1, carry = 0;
  5. while (i >= 0 || j >= 0) {
  6. int sum = carry;
  7. if (j >= 0)
  8. sum += b.charAt(j--) - '0';
  9. if (i >= 0)
  10. sum += a.charAt(i--) - '0';
  11. sb.append(sum % 2);
  12. carry = sum / 2;
  13. }
  14. if (carry != 0) {
  15. sb.append(carry);
  16. }
  17. return sb.reverse().toString();
  18. }
  19. }

方法二

tricky

  1. class Solution {
  2. public String addBinary(String a, String b) {
  3. return Integer.toBinaryString(
  4. Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
  5. );
  6. }
  7. }