Leetcode: Add Binary

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

For example,
a = "11"
b = "1"
Return "100".

 我自己的做法:用StringBuffer, a和b都从末尾扫描到开头,而StringBuffer则是每次存在开头。循环则是只要aindex>=0 or bindext>=0 or carry>0就继续。加法则是分成3部分,依次判断aindex, bindex, carry是否满足加的条件,满足就加。这样写结构非常清晰。可以作为这类题的解题模板

 1 public class Solution {
 2     public String addBinary(String a, String b) {
 3         if (a==null || a.length()==0) return b;
 4         if (b==null || b.length()==0) return a;
 5         StringBuffer res = new StringBuffer();
 6         int aindex = a.length() - 1;
 7         int bindex = b.length() - 1;
 8         int digit = 0;
 9         int carry = 0;
10         while (aindex>=0 || bindex>=0 || carry>0) {
11             int result = 0;
12             if (aindex >= 0) {
13                 result += (int)(a.charAt(aindex) - '0');
14                 aindex--;
15             }
16             if (bindex >= 0) {
17                 result += (int)(b.charAt(bindex) - '0');
18                 bindex--;
19             }
20             if (carry > 0) {
21                 result += carry;
22             }
23             digit = result % 2;
24             carry = result / 2;
25             res.insert(0, digit);
26         }
27         return res.toString();
28     }
29 }

 别人的代码,用StringBuffer,差不多

 1 public String addBinary(String a, String b) {
 2     if(a==null || a.length()==0)
 3         return b;
 4     if(b==null || b.length()==0)
 5         return a;
 6     int i=a.length()-1;
 7     int j=b.length()-1;
 8     int carry = 0;
 9     StringBuilder res = new StringBuilder();
10     while(i>=0&&j>=0)
11     {
12         int digit = (int)(a.charAt(i)-'0'+b.charAt(j)-'0')+carry;
13         carry = digit/2;
14         digit %= 2;
15         res.append(digit);
16         i--;
17         j--;
18     }
19     while(i>=0)
20     {
21         int digit = (int)(a.charAt(i)-'0')+carry;
22         carry = digit/2;
23         digit %= 2;
24         res.append(digit);
25         i--;
26     }
27     while(j>=0)
28     {
29         int digit = (int)(b.charAt(j)-'0')+carry;
30         carry = digit/2;
31         digit %= 2;
32         res.append(digit);
33         j--;
34     }      
35     if(carry>0)
36     {
37         res.append(carry);
38     }
39     return res.reverse().toString();
40 }
原文地址:https://www.cnblogs.com/EdwardLiu/p/3727358.html