leetcode

来源:互联网 发布:时间分配软件 编辑:程序博客网 时间:2024/06/06 06:55

Add Binary

Given two binary strings, return their sum (also a binary string).

For example,

a = “11”

b = “1”

Return “100”.

Solution1:

  public String addBinary(String a, String b) {    if (a.length() > b.length()) {      return addBinary(b, a);    }    int[] result = new int[b.length() + 1];    int gap = b.length() - a.length();    for (int i = a.length() - 1; i >= 0; i--) {      addBinary(a.charAt(i), b.charAt(i + gap), result, i + gap + 1);    }    for (int i = gap - 1; i >= 0; i--) {      addBinary(b.charAt(i), '0', result, i + 1);    }    StringBuilder sb = new StringBuilder();    for (int i : result) {      if (!(sb.length() == 0 && i == 0))        sb.append(i);    }    return sb.length() == 0 ? "0" : sb.toString();  }  private void addBinary(char c1, char c2, int[] result, int index) {    int sum = (c1 - '0') + (c2 - '0') + result[index];    result[index] = sum % 2;    result[index - 1] += sum / 2;  }

Solution2:

better

  public String addBinary(String a, String b) {    StringBuilder sb = new StringBuilder();    int i = a.length() - 1;    int j = b.length() - 1;    int carry = 0;    while (i >= 0 || j >= 0) {      int sum = carry;      sum += j >= 0 ? b.charAt(j--) - '0' : 0;      sum += i >= 0 ? a.charAt(i--) - '0' : 0;      sb.append(sum % 2);      carry = sum / 2;    }    if (carry != 0)      sb.append(carry);    return sb.reverse().toString();  }
0 0