Add Binary

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

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

 1 public class Solution {

 2     public String addBinary(String a, String b) {

 3         // Start typing your Java solution below

 4         // DO NOT write main() function

 5         StringBuffer sb = new StringBuffer();

 6         String l = null;

 7         String s = null;

 8         if(a == null && b == null) return null;

 9         else if(a == "" && b == "") return "";

10         else if(a == "" && b.length() > 0) return b;

11         else if(a.length() > 0 && b == "") return a;

12         if(a.length() > b.length()){

13             l = a;

14             s = b;

15         }else{

16             l = b;

17             s = a;

18         }

19         int j = s.length() - 1;

20         int carry = 0;

21         for(int i = l.length() - 1; i > -1; i --){

22             char c = '0';

23             if(j > -1){

24                 int aa = l.charAt(i) - '0';

25                 int bb = s.charAt(j --) - '0';

26                 c += (aa + bb + carry) % 2;

27                 carry = (aa + bb + carry) / 2;

28             }else{

29                 int aa = l.charAt(i) - '0';

30                 c += (aa + carry) % 2;

31                 carry = (aa + carry) / 2;

32             }

33             sb.insert(0,c);

34         }

35         if(carry == 1)

36             sb.insert(0,"1");

37         return sb.toString();

38     }

39 }

 第二遍:

使用位运算: ^ 异或.

 1 public class Solution {

 2     public String addBinary(String a, String b) {

 3         // Start typing your Java solution below

 4         // DO NOT write main() function

 5         StringBuffer result = new StringBuffer();

 6         int carry = 0;

 7         for(int i = 1; i <= a.length() || i <= b.length(); i ++){

 8             int ac = 0, bc = 0;

 9             if(i <= a.length()) ac = a.charAt(a.length() - i) - '0';

10             if(i <= b.length()) bc = b.charAt(b.length() - i) - '0';

11             result.insert(0, ac ^ bc ^ carry);

12             carry = (ac + bc + carry) > 1 ? 1 : 0;

13         }

14         if(carry > 0) result.insert(0, carry);

15         return result.toString();

16     }

17 }

 

你可能感兴趣的:(binary)