11E
2+ 1519709164
23
34方法一 :土办法没技术 ,把binary换成数字 ,加起来 ,再换成binary 。如果input很大 ,那么很可能int ,long都hold不住 。不保险 。
45
56方法二 :一般方法 ,string化为charArray ,然后逐位加起 ,最后记得处理多余的一个carry on
6-
7+ 注意 : 需要从末尾加起来 , 所以要用一个diff来帮助 shortArray [ i - diff ] 指向 shortArray的相对应index .
78
89```
910/*
@@ -20,40 +21,43 @@ Given two binary strings, return their sum (also a binary string).
2021
2122Tags Expand
2223String Binary Facebook
23-
24-
25-
2624*/
2725
2826/*
29- //Thougths:
30- 1. Turn string binary format into integer
31- 2. add integer
32- 3. turn integer into binary string
33- Note: this just test if we know how to manipulate string/binary/Integer
27+ Thoughts:
28+ Can't just convert to int because of Integer.MAX_VALUE limitation.
29+ Convert to char, and add up all chars
3430*/
35-
36- public class Solution {
37- /**
38- * @param a a number
39- * @param b a number
40- * @return the result
41- */
31+ class Solution {
4232 public String addBinary (String a , String b ) {
43- if (a == null || b == null || a .length () == 0 || b .length () == 0 ) {
44- return null ;
33+ if (a == null || b == null ) {
34+ return a == null ? b : a ;
35+ }
36+ int m = a .length ();
37+ int n = b .length ();
38+ int size = Math .max (m , n );
39+ char [] result = new char [size ];
40+ char [] longArray = m > n ? a .toCharArray () : b .toCharArray ();
41+ char [] shortArray = m > n ? b .toCharArray () : a .toCharArray ();
42+ int diff = longArray .length - shortArray .length ; // important
43+ int carry = 0 ;
44+ for (int i = size - 1 ; i >= 0 ; i --) {
45+ int sum = carry + (longArray [i ] - '0' );
46+ if (i - diff >= 0 ) {
47+ sum += (shortArray [i - diff ] - '0' );
48+ }
49+ carry = sum / 2 ;
50+ result [i ] = (char )(sum % 2 + '0' );
4551 }
46- int decimalA = Integer .parseInt (a , 2 );
47- int decimalB = Integer .parseInt (b , 2 );
48-
49- int sum = decimalA + decimalB ;
5052
51- return Integer .toBinaryString (sum );
53+ if (carry != 0 ) {
54+ return "1" + new String (result );
55+ }
56+ return new String (result );
5257 }
5358}
5459
5560
56-
5761/*
5862 Thought:
5963 Use binary property, add all and move carry-on
@@ -87,4 +91,33 @@ public String addBinary(String a, String b) {
8791}
8892
8993
94+ /*
95+ //Thougths:
96+ 1. Turn string binary format into integer
97+ 2. add integer
98+ 3. turn integer into binary string
99+ Note: this just test if we know how to manipulate string/binary/Integer
100+ */
101+
102+ public class Solution {
103+ /**
104+ * @param a a number
105+ * @param b a number
106+ * @return the result
107+ */
108+ public String addBinary (String a , String b ) {
109+ if (a == null || b == null || a .length () == 0 || b .length () == 0 ) {
110+ return null ;
111+ }
112+ int decimalA = Integer .parseInt (a , 2 );
113+ int decimalB = Integer .parseInt (b , 2 );
114+
115+ int sum = decimalA + decimalB ;
116+
117+ return Integer .toBinaryString (sum );
118+ }
119+ }
120+
121+
122+
90123```
0 commit comments