a= "11"
b =" 1"
Return "100"
2. Implementation
Q1:MSB->LSB
A1: From the end(len-1) and add backward . Consider carry
Q1: carry =1?
A1: add one more character
Q1: Add one more character ?
A1: StringBuilder.append("1").reverse()
res.append(sum%2);
// NOTE: iterating aIndex--; bIndex--;
// NOTE: remain digits while( aIndex >= 0 ) { int sum = (int) (a.charAt(aIndex) - '0') + carry; carry = sum /2; res.append(sum); aIndex--; } while ( bIndex >= 0) { int sum = (int) ( b.charAt( bIndex)- '0') + carry; carry = sum /2; res.append(sum); bIndex--; }
if ( carry > 0) res.append(carry);
// NOTE: reverse() is for StringBuilder
return res.reverse().toString();
// time:O(max(m,n)), Space:O(n) stringbuilder public String addBinary(String a, String b) { // validate the input if (a == null || a.length() ==0 ) return b; if (b == null || b.length () == 0) return a; StringBuilder res = new StringBuilder(); int aIndex = a.length()-1; int bIndex = b.length()-1; int carry = 0; while (aIndex >=0 && bIndex >=0 ) { int sum = (int) (a.charAt(aIndex)-'0') + (int) (b.charAt(bIndex) - '0') + carry; // NOTE: append data type int ,double, boolean..etc,http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html //res.append( String.valuesOf(sum%2) ); res.append(sum%2); carry = sum/2; // NOTE: iterating aIndex--; bIndex--; } // NOTE: remain digits while( aIndex >= 0 ) { int sum = (int) (a.charAt(aIndex) - '0') + carry; carry = sum /2; res.append(sum); aIndex--; } while ( bIndex >= 0) { int sum = (int) ( b.charAt( bIndex)- '0') + carry; carry = sum /2; res.append(sum); bIndex--; } //if (carry ==1 ) // res.append("1"); if ( carry > 0) res.append(carry); //res.toString().reverse(); // NOTE: reverse() is for StringBuilder return res.reverse().toString(); }3. Similar ones
(M) Add Two Numbers
(M) Multiply Strings
(M) Plus One
No comments:
Post a Comment