@@ -49,5 +49,51 @@ public String addBinary(String a, String b) {
49
49
public static void main (String [] args ) {
50
50
Solution solution = new Solution ();
51
51
System .out .println (solution .addBinary ("11" , "1" ));
52
+ System .out .println (solution .myAddBinary ("11" , "1" ));
53
+ System .out .println (solution .addBinary ("11" , "111" ));
54
+ System .out .println (solution .myAddBinary ("11" , "111" ));
55
+ System .out .println (solution .addBinary ("101" , "1110" ));
56
+ System .out .println (solution .myAddBinary ("101" , "1110" ));
57
+
58
+ }
59
+
60
+ public String myAddBinary (String a , String b ) {
61
+ if (a == null || a .length () == 0 ) {
62
+ return b ;
63
+ }
64
+ if (b == null || b .length () == 0 ) {
65
+ return null ;
66
+ }
67
+ StringBuilder sb = new StringBuilder ();
68
+ int aLength = a .length ();
69
+ int bLength = b .length ();
70
+ int minLength = Math .min (aLength , bLength );
71
+ int carry = 0 ;
72
+ for (int i = 0 ; i < minLength ; i ++) {
73
+ char aChar = a .charAt (aLength - 1 - i );
74
+ char bChar = b .charAt (bLength - 1 - i );
75
+ carry += aChar - '0' + bChar - '0' ;
76
+ sb .insert (0 , (char )('0' + carry % 2 ));
77
+ carry >>= 1 ;
78
+ }
79
+ String leftStr = a ;
80
+ if (aLength < bLength ) {
81
+ leftStr = b ;
82
+ }
83
+ carry = addLeft (sb , leftStr , minLength , carry );
84
+ if (carry != 0 ) {
85
+ sb .insert (0 , '1' );
86
+ }
87
+ return sb .toString ();
88
+ }
89
+
90
+ private int addLeft (StringBuilder sb , String leftStr , int minLength , int carry ) {
91
+ for (int i = minLength ; i < leftStr .length (); i ++) {
92
+ char aChar = leftStr .charAt (leftStr .length () - 1 - i );
93
+ carry += aChar - '0' ;
94
+ sb .insert (0 , (char )('0' + carry % 2 ));
95
+ carry >>= 1 ;
96
+ }
97
+ return carry ;
52
98
}
53
99
}
0 commit comments